相信很多人都跟我一样,当我们使用不同数据库的时候,都会有这样一个疑问:我们当前使用的这个数据库到底有没有为我们提供某个我们需要的功能的函数? 说到点子上了吧?因此,我们特别关心数据库的函数。当然,每一种数据库提供的函数都比较多,都难以通过记忆记下多少,也没有那个必要去花很多的时间去浪费精力去记下那么多的函数。我们所要做的就是,在我们需要某个函数的时候,有一个地方,能让我们很快地就查询、找到我们需要的函数。就像现在购物一样,很多东西都不需要我们出门去实地考察,去看,很多东西的大致情况,我们通过网络就能了解到。当然,有那个时间实地去更好,可惜通常事与愿违。好了,闲话不多说,我特选取了我们在数据库方面用的最多的日期时间函数进行整理。这篇是MySQL的日期时间函数整理,顺便提一下,接着,会有一篇Oracle日期时间函数的整理。需要查询的可以去看看。
首先,在这里我声明一下,这篇文章中的很大部分都是我参考了网上很多人提供的资料,伤害到了切莫见怪。
好呢,废话不多说,上菜。
首先,迎面向这边走来的是,具有相同功能都能获取当前日期或者时间的几位佳丽,她们分别是:now()、sysdate()、current_timestamp()、localtime()、localtimestamp()、utc_timestamp()出来的都是日期+时间,curdate()、current_date()、utc_date()出来的都是日期,curtime()、current_time()、utc_time()出来的都是时间。
第一批:
- select now();
- select sysdate();
- select current_timestamp();
- select localtime();
- select localtimestamp();
- select utc_timestamp(); //只有她最特殊,与东方佳丽不同,她可是每次都要犹抱琵琶
- 遮面地多化八个小时的妆,出来的效果都会比别人晚八个小时。
- 怎么?千呼万唤始出来以后,是不是你心动了呢?
她们都倔强地一致运行出结果,日期+时间,不知道你看上了她们中的哪一位?
- 2013-01-21 20:17:28
第二批:
- select curdate();
- select current_date();
- select utc_date(); //特殊,不赘述。
她们都倔强地一致运行出结果,日期,不知道你看上了她们中的哪一位?
- 2013-01-21
第三批:
- select curtime();
- select current_time();
- select utc_time(); //特殊,不赘述。
她们都倔强地一致运行出结果,时间,不知道你看上了她们中的哪一位?
- 20:17:28
好了,别傻眼了,前面的都只是抛砖引玉,重头人物的亮相才刚开始。继续上菜。
接下来,这次向我们走来的是,年、月、日、时、分、秒等,国色天香就不说了,主要是她们很重要。她们就直接在下面“亮相”诱惑你们得了。代码和运行结果如下,合并:
- SELECT YEAR('1998-02-03'); //获取哪一年。
- SELECT MONTH('1998-02-03'); //获哪一取月。
- SELECT DAY('1998-02-03'); //获取哪一天。
- SELECT HOUR('1998-02-03 20:11:27'); //获取时。
- SELECT MINUTE('1998-02-03 20:11:27'); //获取分。
- SELECT SECOND('1998-02-03 20:11:27'); //获取秒。
- 运行结果:1998 2 3 20 11 27
- SELECT DAYOFYEAR('1998-02-03'); //一年中的哪一天。
- SELECT DAYOFMONTH('1998-02-03'); //一个月中的哪一天。
- SELECT DAYOFWEEK('1998-02-03'); //一周的哪一天。
- 运行结果:34 3 3
- SELECT MONTHNAME("1998-02-05"); //获取月的英文名称。
- SELECT DAYNAME("1998-02-05"); //获取日的英文名称。
- 运行结果:February Thursday
- SELECT WEEK('1998-02-03');
- SELECT WEEKOFYEAR('1998-02-03');
- SELECT WEEKDAY('1998-02-03');
- 运行结果:5 6 1
- SELECT QUARTER('1998-02-03');
- 运行结果:1
- SELECT PERIOD_ADD(9801,2);
- 运行结果:199803
- SELECT PERIOD_DIFF(9802,199703);
- 运行结果:11
好了,回过神,另一批重要的人物上场了,她们都有个爱好,喜欢“间隔”时间:
- SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;
- 运行结果:1998-01-01 00:00:00
- SELECT "1998-01-01" - INTERVAL 1 SECOND;
- 运行结果:1997-12-31 23:59:59
- SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
- 运行结果:1998-01-01 00:00:00
- SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
- 运行结果:1997-12-02
- SELECT ADDDATE("1997-12-31 23:59:59",INTERVAL 1 SECOND);
- 运行结果:1998-01-01 00:00:00
- SELECT SUBDATE("1998-01-02", INTERVAL 31 DAY);
- 运行结果:1997-12-02
接近尾声,日期格式化终于压轴上场,她们妖娆,以各种媚姿出现:
- SELECT DATE_FORMAT('1997-10-04 22:23:00','%W %M %Y');
- 格式化日期,让日期的显示更漂亮。
- %M 月名(January……December)
- %W 星期名(Sunday……Saturday)
- %D 有英语前缀的月份的日期(1st, 2nd, 3rd等)。
- %Y 年, 数字, 4 位 %y 年, 数字, 2 位
- %a 缩写的星期名(Sun……Sat)
- %d 月份中的天数, 数字(00……31)
- %e 月份中的天数, 数字(0……31)
- %m 月, 数字(01……12)
- %c 月, 数字(1……12)
- %b 缩写的月份名(Jan……Dec)
- %j 一年中的天数(001……366)
- %H 小时(00……23)
- %k 小时(0……23)
- %h 小时(01……12)
- %I 小时(01……12)
- %l 小时(1……12)
- %i 分钟, 数字(00……59)
- %r 时间,12 小时(hh:mm:ss [AP]M)
- %T 时间,24 小时(hh:mm:ss)
- %S 秒(00……59)
- %s 秒(00……59)
- %p AM或PM
- %w 一个星期中的天数(0=Sunday ……6=Saturday)
- %U 星期(0……52), 这里星期天是星期的第一天
- %u 星期(0……52), 这里星期一是星期的第一天
- %% 字符%
- 运行结果:Saturday October 1997
最后上场的是日期、时间转换函数,还有获取指定日期的上一天以及拼凑日期和时间:
- SELECT SEC_TO_TIME(2378); //秒转换为时间。
- 运行结果:00:39:38
- SELECT TIME_TO_SEC('22:23:00'); //时间转换为秒。
- 运行结果:80580
- SELECT TO_DAYS('1997-10-07'); //天转换为秒。
- 运行结果:729669
- SELECT FROM_DAYS(729669); //秒转换为天。
- 运行结果:1997-10-07
- SELECT LAST_DAY('2008-02-01'); //返回指定日期的上一天。
- 运行结果:2008-02-29
- SELECT MAKEDATE(2001,31); //拼凑日期。
- 运行结果:2001-01-31
- SELECT MAKETIME(12,15,30); //拼凑时间。
- 运行结果:12:15:30
好了,走着。