转换datetime值dt,从 from_tz 转到 to_tz 时区,并返回的结果值。
如果参数无效该函数返回NULL。
MySQL [test_db]> select convert_tz('2019-08-01 13:21:03', 'Asia/Shanghai', 'America/Los_Angeles'); +---------------------------------------------------------------------------+ | convert_tz('2019-08-01 13:21:03', 'Asia/Shanghai', 'America/Los_Angeles') | +---------------------------------------------------------------------------+ | 2019-07-31 22:21:03 | +---------------------------------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select convert_tz('2019-08-01 13:21:03', '+08:00', 'America/Los_Angeles'); +--------------------------------------------------------------------+ | convert_tz('2019-08-01 13:21:03', '+08:00', 'America/Los_Angeles') | +--------------------------------------------------------------------+ | 2019-07-31 22:21:03 | +--------------------------------------------------------------------+ 1 row in set (0.01 sec)
MySQL [test_db]> SELECT CURDATE(); +------------+ | curdate() | +------------+ | 2023-02-26 | +------------+ 1 row in set (0.00 sec) MySQL [test_db]> SELECT CURDATE() + 0; +----------------+ | curdate() + 0 | +----------------+ | 20230226000000 | +----------------+ 1 row in set (0.00 sec)
获得当前的时间,以Datetime类型返回
MySQL [test_db]> select current_timestamp(); +---------------------+ | current_timestamp() | +---------------------+ | 2023-02-26 16:09:42 | +---------------------+ 1 row in set (0.00 sec)
获得当前的时间,以TIME类型返回
MySQL [test_db]> select current_time(); +----------------+ | current_time() | +----------------+ | 16:09:58 | +----------------+ 1 row in set (0.00 sec)
向日期添加指定的时间间隔。
date 参数是合法的日期表达式。
expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
MySQL [test_db]> select date_add('2020-11-01 23:59:59', INTERVAL 2 DAY); +-------------------------------------------------+ | date_add('2020-11-01 23:59:59', INTERVAL 2 DAY) | +-------------------------------------------------+ | 2020-11-03 23:59:59 | +-------------------------------------------------+ 1 row in set (0.00 sec)
将日期类型按照format的类型转化为字符串, 当前支持最大128字节的字符串,如果返回值长度超过128,则返回NULL
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 位 %% | 用于表示 %
MySQL [test_db]> select date_format('2020-10-04 22:23:00', '%W %M %Y'); +------------------------------------------------+ | date_format('2020-10-04 22:23:00', '%W %M %Y') | +------------------------------------------------+ | 星期日 十月 2020 | +------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select date_format('2020-10-04 22:23:00', '%H:%i:%s'); +------------------------------------------------+ | date_format('2020-10-04 22:23:00', '%H:%i:%s') | +------------------------------------------------+ | 22:23:00 | +------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select date_format('2020-10-04 22:23:00', '%D %y %a %d %m %b %j'); +------------------------------------------------------------+ | date_format('2020-10-04 22:23:00', '%D %y %a %d %m %b %j') | +------------------------------------------------------------+ | 4th 20 Sun 04 10 Oct 278 | +------------------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select date_format('2020-10-04 22:23:00', '%H %k %I %r %T %S %w'); +------------------------------------------------------------+ | date_format('2020-10-04 22:23:00', '%H %k %I %r %T %S %w') | +------------------------------------------------------------+ | 22 22 10 10:23:00 PM 22:23:00 00 0 | +------------------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select date_format('2020-01-01 00:00:00', '%X %V'); +---------------------------------------------+ | date_format('2020-01-01 00:00:00', '%X %V') | +---------------------------------------------+ | 2019 52 | +---------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select date_format('2020-06-01', '%d'); +------------------------------------------+ | date_format('2020-06-01 00:00:00', '%d') | +------------------------------------------+ | 01 | +------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select date_format('2020-06-01', '%%%d'); +--------------------------------------------+ | date_format('2020-06-01 00:00:00', '%%%d') | +--------------------------------------------+ | %01 | +--------------------------------------------+ 1 row in set (0.00 sec)
从日期减去指定的时间间隔
date 参数是合法的日期表达式。
expr 参数是您希望添加的时间间隔。
type 参数可以是下列值:YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
MySQL [test_db]> select date_sub('2010-11-30 23:59:59', INTERVAL 2 DAY); +-------------------------------------------------+ | date_sub('2010-11-30 23:59:59', INTERVAL 2 DAY) | +-------------------------------------------------+ | 2010-11-28 23:59:59 | +-------------------------------------------------+ 1 row in set (0.01 sec)
计算expr1 - expr2,结果精确到天。
expr1 和 expr2 参数是合法的日期或日期/时间表达式。
注释:只有值的日期部分参与计算。
MySQL [test_db]> select datediff(CAST('2020-12-31 23:59:59' AS DATETIME), CAST('2020-12-30' AS DATETIME)); +-----------------------------------------------------------------------------------+ | datediff(CAST('2020-12-31 23:59:59' AS DATETIME), CAST('2020-12-30' AS DATETIME)) | +-----------------------------------------------------------------------------------+ | 1 | +-----------------------------------------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> MySQL [test_db]> select datediff(CAST('2020-11-30 23:59:59' AS DATETIME), CAST('2020-12-31' AS DATETIME)); +-----------------------------------------------------------------------------------+ | datediff(CAST('2020-11-30 23:59:59' AS DATETIME), CAST('2020-12-31' AS DATETIME)) | +-----------------------------------------------------------------------------------+ | -31 | +-----------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
获得日期中的天信息,返回值范围从1-31。
参数为Date或者Datetime类型
MySQL [test_db]> select day('2020-01-31'); +----------------------------+ | day('2020-01-31 00:00:00') | +----------------------------+ | 31 | +----------------------------+ 1 row in set (0.00 sec)
返回日期对应的日期名字
参数为Date或者Datetime类型
MySQL [test_db]> select dayname('2020-02-03 00:00:00'); +--------------------------------+ | dayname('2020-02-03 00:00:00') | +--------------------------------+ | Monday | +--------------------------------+ 1 row in set (0.01 sec)
获得日期中的天信息,返回值范围从1-31。
参数为Date或者Datetime类型
MySQL [test_db]> select dayofmonth('2020-01-31'); +-----------------------------------+ | dayofmonth('2020-01-31 00:00:00') | +-----------------------------------+ | 31 | +-----------------------------------+ 1 row in set (0.01 sec)
DAYOFWEEK函数返回日期的工作日索引值,即星期日为1,星期一为2,星期六为7
参数为Date或者Datetime类型或者可以cast为Date或者Datetime类型的数字
MySQL [test_db]> select dayofweek('2020-06-25'); +----------------------------------+ | dayofweek('2020-06-25 00:00:00') | +----------------------------------+ | 5 | +----------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select dayofweek(cast(20190620 as date)); +-----------------------------------+ | dayofweek(CAST(20190620 AS DATE)) | +-----------------------------------+ | 5 | +-----------------------------------+ 1 row in set (0.01 sec)
获得日期中对应当年中的哪一天。
参数为Date或者Datetime类型
MySQL [test_db]> select dayofyear('2020-02-03 00:00:00'); +----------------------------------+ | dayofyear('2020-02-03 00:00:00') | +----------------------------------+ | 34 | +----------------------------------+ 1 row in set (0.00 sec)
通过距离0000-01-01日的天数计算出哪一天
MySQL [test_db]> select from_days(730669); +-------------------+ | from_days(730669) | +-------------------+ | 2000-07-03 | +-------------------+ 1 row in set (0.01 sec)
将 unix 时间戳转化为对应的 time 格式,返回的格式由 string_format 指定
默认为 yyyy-MM-dd HH:mm:ss ,也支持date_format中的format格式
传入的是整形,返回的是字符串类型
目前 string_format 支持格式:
%Y:年。例:2014,1900 %m:月。例:12,09 %d:日。例:11,01 %H:时。例:23,01,12 %i:分。例:05,11 %s:秒。例:59,01
其余 string_format 格式是非法的,返回NULL
如果给定的时间戳小于 0 或大于 253402271999,则返回 NULL。即时间戳范围是:
1970-01-01 00:00:00 ~ 9999-12-31 23:59:59
MySQL [test_db]> select from_unixtime(1196440219); +---------------------------+ | from_unixtime(1196440219) | +---------------------------+ | 2007-12-01 00:30:19 | +---------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select from_unixtime(1196440219, 'yyyy-MM-dd HH:mm:ss'); +------------------------------------------------+ | from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s') | +------------------------------------------------+ | 2007-12-01 00:30:19 | +------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select from_unixtime(1196440219, '%Y-%m-%d'); +---------------------------------------+ | from_unixtime(1196440219, '%Y-%m-%d') | +---------------------------------------+ | 2007-12-01 | +---------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s'); +------------------------------------------------+ | from_unixtime(1196440219, '%Y-%m-%d %H:%i:%s') | +------------------------------------------------+ | 2007-12-01 00:30:19 | +------------------------------------------------+ 1 row in set (0.00 sec)
获得日期中的小时的信息,返回值范围从0-23。
参数为Date或者Datetime类型
MySQL [test_db]> select hour('2018-12-31 23:59:59'); +-----------------------------+ | hour('2018-12-31 23:59:59') | +-----------------------------+ | 23 | +-----------------------------+ 1 row in set (0.00 sec)
获得日期中的分钟的信息,返回值范围从0-59。
参数为Date或者Datetime类型
MySQL [test_db]> select minute('2018-12-31 23:59:59'); +-------------------------------+ | minute('2018-12-31 23:59:59') | +-------------------------------+ | 59 | +-------------------------------+ 1 row in set (0.00 sec)
返回时间类型中的月份信息,范围是1, 12
参数为Date或者Datetime类型
MySQL [test_db]> select month('1987-01-01'); +------------------------------+ | month('1987-01-01 00:00:00') | +------------------------------+ | 1 | +------------------------------+ 1 row in set (0.00 sec)
返回日期对应的月份名字
参数为Date或者Datetime类型
MySQL [test_db]> select monthname('2008-02-03 00:00:00'); +----------------------------------+ | monthname('2008-02-03 00:00:00') | +----------------------------------+ | February | +----------------------------------+ 1 row in set (0.01 sec)
获得当前的时间,以Datetime类型返回
MySQL [test_db]> select now(); +---------------------+ | now() | +---------------------+ | 2023-02-26 16:19:27 | +---------------------+ 1 row in set (0.00 sec)
获得日期中的秒的信息,返回值范围从0-59。
参数为Date或者Datetime类型
MySQL [test_db]> select second('2018-12-31 23:59:59'); +-------------------------------+ | second('2018-12-31 23:59:59') | +-------------------------------+ | 59 | +-------------------------------+ 1 row in set (0.00 sec)
通过format指定的方式将str转化为DATE类型,如果转化结果不对返回NULL
支持的format格式与date_format一致
MySQL [test_db]> select str_to_date('2020-12-21 12:34:56', '%Y-%m-%d %H:%i:%s'); +---------------------------------------------------------+ | str_to_date('2020-12-21 12:34:56', '%Y-%m-%d %H:%i:%s') | +---------------------------------------------------------+ | 2020-12-21 12:34:56 | +---------------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select str_to_date('2020-12-21 12:34%3A56', '%Y-%m-%d %H:%i%%3A%s'); +--------------------------------------------------------------+ | str_to_date('2020-12-21 12:34%3A56', '%Y-%m-%d %H:%i%%3A%s') | +--------------------------------------------------------------+ | 2020-12-21 12:34:56 | +--------------------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select str_to_date('202042 Monday', '%X%V %W'); +-----------------------------------------+ | str_to_date('202042 Monday', '%X%V %W') | +-----------------------------------------+ | 2020-10-19 | +-----------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select str_to_date("2020-09-01", "%Y-%m-%d %H:%i:%s"); +------------------------------------------------+ | str_to_date('2020-09-01', '%Y-%m-%d %H:%i:%s') | +------------------------------------------------+ | 2020-09-01 00:00:00 | +------------------------------------------------+ 1 row in set (0.00 sec)
TIMEDIFF返回两个DATETIME之间的差值
TIMEDIFF函数返回表示为时间值的expr1 - expr2的结果,返回值为TIME类型
MySQL [test_db]> SELECT TIMEDIFF(now(),utc_timestamp()); +----------------------------------+ | timediff(now(), utc_timestamp()) | +----------------------------------+ | 08:00:00 | +----------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> SELECT TIMEDIFF('2020-07-11 16:59:30','2019-07-11 16:59:21'); +--------------------------------------------------------+ | timediff('2020-07-11 16:59:30', '2019-07-11 16:59:21') | +--------------------------------------------------------+ | 8784:00:09 | +--------------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> SELECT TIMEDIFF('2020-01-01 00:00:00', NULL); +---------------------------------------+ | timediff('2020-01-01 00:00:00', NULL) | +---------------------------------------+ | NULL | +---------------------------------------+ 1 row in set (0.01 sec)
将整数表达式间隔添加到日期或日期时间表达式datetime_expr中。
interval的单位由unit参数给出,它应该是下列值之一:
SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, or YEAR。
MySQL [test_db]> SELECT TIMESTAMPADD(MINUTE,1,'2020-01-02'); +------------------------------------------------+ | timestampadd(MINUTE, 1, '2020-01-02 00:00:00') | +------------------------------------------------+ | 2020-01-02 00:01:00 | +------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> SELECT TIMESTAMPADD(WEEK,1,'2020-01-02'); +----------------------------------------------+ | timestampadd(WEEK, 1, '2020-01-02 00:00:00') | +----------------------------------------------+ | 2020-01-09 00:00:00 | +----------------------------------------------+ 1 row in set (0.01 sec)
返回datetime_expr2−datetime_expr1,其中datetime_expr1和datetime_expr2是日期或日期时间表达式。
结果(整数)的单位由unit参数给出。interval的单位由unit参数给出,它应该是下列值之一:
SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, or YEAR
MySQL [test_db]> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); +--------------------------------------------------------------------+ | timestampdiff(MONTH, '2003-02-01 00:00:00', '2003-05-01 00:00:00') | +--------------------------------------------------------------------+ | 3 | +--------------------------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01'); +-------------------------------------------------------------------+ | timestampdiff(YEAR, '2002-05-01 00:00:00', '2001-01-01 00:00:00') | +-------------------------------------------------------------------+ | -1 | +-------------------------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55'); +---------------------------------------------------------------------+ | timestampdiff(MINUTE, '2003-02-01 00:00:00', '2003-05-01 12:05:55') | +---------------------------------------------------------------------+ | 128885 | +---------------------------------------------------------------------+ 1 row in set (0.01 sec)
返回date距离0000-01-01的天数
参数为Date或者Datetime类型
MySQL [test_db]> select to_days('2007-10-07'); +-----------------------+ | to_days('2007-10-07') | +-----------------------+ | 733321 | +-----------------------+ 1 row in set (0.01 sec)
将 Date 或者 Datetime 类型转化为 unix 时间戳。
如果没有参数,则是将当前的时间转化为时间戳。
参数需要是 Date 或者 Datetime 类型。
对于在 1970-01-01 00:00:00 之前或 2038-01-19 03:14:07 之后的时间,该函数将返回 0。
Format 的格式请参阅 date_format 函数的格式说明。
该函数受时区影响。
MySQL [test_db]> select unix_timestamp(); +------------------+ | unix_timestamp() | +------------------+ | 1677399817 | +------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select unix_timestamp('2007-11-30 10:30:19'); +---------------------------------------+ | unix_timestamp('2007-11-30 10:30:19') | +---------------------------------------+ | 1196389819 | +---------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select unix_timestamp('2007-11-30 10:30-19', '%Y-%m-%d %H:%i-%s'); +------------------------------------------------------------+ | unix_timestamp('2007-11-30 10:30-19', '%Y-%m-%d %H:%i-%s') | +------------------------------------------------------------+ | 1196389819 | +------------------------------------------------------------+ 1 row in set (0.00 sec) MySQL [test_db]> select unix_timestamp('2007-11-30 10:30%3A19', '%Y-%m-%d %H:%i%%3A%s'); +-----------------------------------------------------------------+ | unix_timestamp('2007-11-30 10:30%3A19', '%Y-%m-%d %H:%i%%3A%s') | +-----------------------------------------------------------------+ | 1196389819 | +-----------------------------------------------------------------+ 1 row in set (0.01 sec) MySQL [test_db]> select unix_timestamp('1969-01-01 00:00:00'); +---------------------------------------+ | unix_timestamp('1969-01-01 00:00:00') | +---------------------------------------+ | 0 | +---------------------------------------+ 1 row in set (0.00 sec)
返回当前UTC日期和时间在 “YYYY-MM-DD HH:MM:SS” 或
"YYYYMMDDHHMMSS"格式的一个值
根据该函数是否用在字符串或数字语境中
MySQL [test_db]> select utc_timestamp(),utc_timestamp() + 1; +---------------------+---------------------+ | utc_timestamp() | utc_timestamp() + 1 | +---------------------+---------------------+ | 2023-02-26 08:24:03 | 20230226082404 | +---------------------+---------------------+ 1 row in set (0.00 sec)
获得一年中的第几周
参数为Date或者Datetime类型
MySQL [test_db]> select weekofyear('2023-02-20 00:00:00'); +-----------------------------------+ | weekofyear('2023-02-20 00:00:00') | +-----------------------------------+ | 8 | +-----------------------------------+ 1 row in set (0.00 sec)
返回date类型的year部分,范围从1000-9999
参数为Date或者Datetime类型
MySQL [test_db]> select year('1987-01-01'); +-----------------------------+ | year('1987-01-01 00:00:00') | +-----------------------------+ | 1987 | +-----------------------------+ 1 row in set (0.00 sec)