企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
日期和时间函数 1、ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days) 当expr为正数时则为增加时间,为负数时则为减少时间 Unit参数可以是任意时间单位 ~~~ mysql> SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY); -> '2008-02-02‘ mysql> SELECT ADDDATE('2008-01-02', 31); -> '2008-02-02‘ ~~~ 2、ADDTIME(expr1,expr2) 将expr2的时间增加到expr1上 ~~~ mysql> SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002'); -> '2008-01-02 01:01:01.000001' mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998'); -> '03:00:01.999997' ~~~ 3、CONVERT_TZ(dt,from_tz,to_tz) 将时间dt从from_tz这个时区转换成to_tz这个时区并返回 ~~~ mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); -> '2004-01-01 13:00:00' mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00'); -> '2004-01-01 22:00:00‘ ~~~ 4、CURDATE(), CURRENT_DATE, CURRENT_DATE() 返回以yyyy-mm-dd或者yyyymmdd格式的当前时间 ~~~ mysql> SELECT CURDATE(); -> '2008-06-13' mysql> SELECT CURDATE() + 0; -> 20080613 ~~~ 5、CURTIME(),CURRENT_TIME,CURRENT_TIME() ~~~ 按照hh:mm:ss或者hhmmss格式返回当前时间 mysql> SELECT CURTIME(); -> '23:50:26' mysql> SELECT CURTIME() + 0; -> 235026.000000 ~~~ 6、Now(), CURRENT_TIMESTAMP,CURRENT_TIMESTAMP() 返回当前的日期和时间,格式为yyyy-mm-dd hh:mi:ss或者yyyymmddhhmiss ~~~ mysql> SELECT NOW(); -> '2007-12-15 23:50:26' mysql> SELECT NOW() + 0; -> 20071215235026.000000 mysql> select now(3); ###3显示3位毫秒数 +-------------------------+ | now(3) | +-------------------------+ | 2018-03-02 17:07:46.029 | +-------------------------+ 1 row in set (0.00 sec) ~~~ 7、DATE(expr) 获取expr中的日期 ~~~ mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31‘ ~~~ 8、DATEDIFF(expr1,expr2) 返回expr1和expr2之间的天数差异,忽略时分秒 ~~~ mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); -> 1 mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31'); -> -3 ~~~ 9、DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit) 增加或者减少时间 ~~~ mysql> SELECT DATE_ADD('2000-12-31 23:59:59', -> INTERVAL 1 SECOND); -> '2001-01-01 00:00:00' mysql> SELECT DATE_ADD('2010-12-31 23:59:59', -> INTERVAL 1 DAY); -> '2011-01-01 23:59:59' mysql> SELECT DATE_ADD('2100-12-31 23:59:59', -> INTERVAL '1:1' MINUTE_SECOND); -> '2101-01-01 00:01:00' mysql> SELECT DATE_SUB('2005-01-01 00:00:00', -> INTERVAL '1 1:1:1' DAY_SECOND); -> '2004-12-30 22:58:59' mysql> SELECT DATE_ADD('1900-01-01 00:00:00', -> INTERVAL '-1 10' DAY_HOUR); -> '1899-12-30 14:00:00' mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); -> '1997-12-02' mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002', -> INTERVAL '1.999999' SECOND_MICROSECOND); -> '1993-01-01 00:00:01.000001' mysql> SELECT DATE_ADD('2009-01-30', INTERVAL 1 MONTH); -> '2009-02-28' ~~~ ~~~ unit 值 期望的 expr 格式 MICROSECOND MICROSECONDS ###微秒 SECOND SECONDS MINUTE MINUTES HOUR HOURS DAY DAYS WEEK WEEKS MONTH MONTHS QUARTER QUARTERS YEAR YEARS SECOND_MICROSECOND 'SECONDS.MICROSECONDS' MINUTE_MICROSECOND 'MINUTES.MICROSECONDS' MINUTE_SECOND 'MINUTES:SECONDS' HOUR_MICROSECOND 'HOURS.MICROSECONDS' HOUR_SECOND 'HOURS:MINUTES:SECONDS' HOUR_MINUTE 'HOURS:MINUTES' DAY_MICROSECOND 'DAYS.MICROSECONDS' DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS' DAY_MINUTE 'DAYS HOURS:MINUTES' DAY_HOUR 'DAYS HOURS' YEAR_MONTH 'YEARS-MONTHS' ~~~ 10、DATE_FORMAT(date,format) 将date日期时间转换成format格式 ~~~ 格式 描述 %a 缩写星期名 %b 缩写月名 %c 月,数值 %D 带有英文前缀的月中的天 %d 月的天,数值(00-31) %e 月的天,数值(0-31) %f 微秒 %H 小时 (00-23) %h 小时 (01-12) %I 小时 (01-12) %i 分钟,数值(00-59) %j 年的天 (001-366) %k 小时 (0-23) %l 小时 (1-12) %M 月名 %m 月,数值(00-12) %p AM 或 PM %r 时间,12-小时(hh:mm:ss AM 或 PM) %S 秒(00-59) %s 秒(00-59) %T 时间, 24-小时 (hh:mm:ss) %U 周 (00-53) 星期日是一周的第一天 %u 周 (00-53) 星期一是一周的第一天 %V 周 (01-53) 星期日是一周的第一天,与 %X 使用 %v 周 (01-53) 星期一是一周的第一天,与 %x 使用 %W 星期名 %w 周的天 (0=星期日, 6=星期六) %X 年,其中的星期日是周的第一天,4 位,与 %V 使用 %x 年,其中的星期一是周的第一天,4 位,与 %v 使用 %Y 年,4 位 %y 年,2 位 ~~~ DATE_FORMAT(date,format) ~~~ mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y'); -> 'Sunday October 2009' mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00' mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00', -> '%D %y %a %d %m %b %j'); -> '4th 00 Thu 04 10 Oct 277' mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', -> '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6' mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52' mysql> SELECT DATE_FORMAT('2006-06-00', '%d'); -> '00' ~~~ 11、DAY(date), DAYOFMONTH(date) 返回date中日期在当前月份中是第几天 ~~~ mysql> SELECT DAYOFMONTH('2007-02-03'); -> 3 ~~~ 12、DAYNAME(date) 返回date时间是星期几 ~~~ mysql> SELECT DAYNAME('2007-02-03'); -> 'Saturday‘ ~~~ 13、DAYOFWEEK(date) 返回date时间是星期“几” ~~~ mysql> SELECT DAYOFWEEK('2007-02-03'); -> 7 ~~~ 14、DAYOFYEAR(date) 返回date是一年中的第几天,取值范围在1~366 ~~~ mysql> SELECT DAYOFYEAR('2007-02-03'); -> 34 ~~~ 15、EXTRACT(unit FROM date) Unit单元和date_add/date_sub函数中的一样,是获取date日期的unit部分 ~~~ mysql> SELECT EXTRACT(YEAR FROM '2009-07-02'); -> 2009 mysql> SELECT EXTRACT(YEAR_MONTH FROM '2009-07-02 01:02:03'); -> 200907 mysql> SELECT EXTRACT(DAY_MINUTE FROM '2009-07-02 01:02:03'); -> 20102 mysql> SELECT EXTRACT(MICROSECOND -> FROM '2003-01-02 10:30:00.000123'); -> 123 ~~~ 16、FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format) 根据给定的unixtime,返回yyyy-mm-dd hh:mi:ss或者yyyymmddhhmiss格式的具体时间,或者按照format返回时间 ~~~ mysql> SELECT FROM_UNIXTIME(1447430881); -> '2015-11-13 10:08:01' mysql> SELECT FROM_UNIXTIME(1447430881) + 0; -> 20151113100801 mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), -> '%Y %D %M %h:%i:%s %x'); -> '2015 13th November 10:08:01 2015‘ ~~~ 17、LAST_DAY(date) 返回date日期所在月份的最后一天日期 ~~~ mysql> SELECT LAST_DAY('2004-02-05'); -> '2004-02-29' mysql> SELECT LAST_DAY('2004-01-01 01:01:01'); -> '2004-01-31' mysql> SELECT LAST_DAY('2003-03-32'); -> NULL ~~~ 18、SYSDATE() 返回当前日期和时间,格式为yyyy-mm-dd hh:mi:ss或者yyyymmddhhmiss 和now()函数的区别在于now()返回的时间是语句执行的时间,而sysdate()返回的时间是该函数执行的时间 ~~~ mysql> SELECT NOW(), SLEEP(2), NOW(); +---------------------+----------+---------------------+ | NOW() | SLEEP(2) | NOW() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36 | +---------------------+----------+---------------------+ mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE(); +---------------------+----------+---------------------+ | SYSDATE() | SLEEP(2) | SYSDATE() | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46 | +---------------------+----------+---------------------+ ~~~ 19、TIME(expr) 返回expr日期时间中的时间部分 ~~~ mysql> SELECT TIME('2003-12-31 01:02:03'); -> '01:02:03' mysql> SELECT TIME('2003-12-31 01:02:03.000123'); -> '01:02:03.000123‘ ~~~ 20、UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) 如果没有date参数,则返回当前时间到1970-01-01 00:00:00之间的秒数,如果有date参数,则表示date到1970-01-01 00:00:00之间的秒数 ~~~ mysql> SELECT UNIX_TIMESTAMP(); -> 1447431666 mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19'); -> 1447431619 ~~~