-- 日期函数
-- -- 时区转换
SELECT CONVERT_TZ('2019-08-01 13:21:03', 'Asia/Shanghai', 'America/Los_Angeles');
SELECT CONVERT_TZ('2019-08-01 13:21:03', '+08:00', 'America/Los_Angeles');
-- -- 当前日期 2019-12-20
SELECT CURDATE();
SELECT CURRENT_DATE();
-- -- 当前时间 15:25:47
SELECT CURTIME();
SELECT CURRENT_TIME();
-- -- 当前时间戳,到秒 2022-09-22 17:30:23
SELECT CURRENT_TIMESTAMP();
SELECT LOCALTIME();
SELECT LOCALTIMESTAMP();
SELECT NOW();
-- -- 年、月、日、周、工作日
SELECT YEAR('1987-01-01 00:00:00'); -- 1987
SELECT QUARTER('1987-05-01 00:00:00'); -- 2
SELECT MONTH('1987-07-01 00:00:00'); -- 7
SELECT DAY('1987-07-18 00:00:00'); -- 18
SELECT DAYOFYEAR('1987-07-18 00:00:00'); -- 199
SELECT DAYOFMONTH('1987-07-18 00:00:00'); -- 18
SELECT DAYOFWEEK('1987-07-18 00:00:00'); -- 7
SELECT WEEK('1987-07-18 00:00:00'); -- 28 [date, mode] (mode默认0,星期的第一天为周日,这一年的第一个星期日所在的星期为本年第一周)
SELECT WEEKDAY('1987-07-18 00:00:00'); -- 5 日期的工作日索引值。周一为 0 周二为 1
SELECT WEEKOFYEAR('1987-07-18 00:00:00'); -- 29 与week不同,需要注意
SELECT YEARWEEK('1987-07-18 00:00:00'); -- 198728 指定日期的年份和星期数 [date, mode] (mode默认0,星期的第一天为周日,这一年的第一个星期日所在的星期为本年第一周)
SELECT DAYNAME('1987-07-18 00:00:00'); -- saturday 返回日期对应的名字
SELECT MONTHNAME('1987-07-18 00:00:00'); -- July
SELECT HOUR('1987-07-18 00:00:00'); -- 时
SELECT MINUTE('1987-07-18 00:00:00');
SELECT FROM_DAYS(1000000); -- 2737-11-28 通过距离0000-01-01日的天数计算出哪一天
SELECT LAST_DAY('2737-11-28'); -- 2737-11-30 返回日期中月份的最后一天
SELECT to_monday('2737-11-30'); -- 2737-11-29 将日期或带时间的日期向下舍入到最近的星期一
-- -- 时间戳
SELECT FROM_UNIXTIME(100000,'%Y-%m-%d %H:%i:%s'); -- 1970-01-02 11:46:40 unix时间戳转换为对应的time字符串,format格式非法时,返回NULL
-- yyyy-MM-dd HH:mm:ss
SELECT UNIX_TIMESTAMP('1987-07-18 00:00:00','%Y-%m-%d %H:%i:%s'); -- 553536000 将 Date 或者 Datetime 类型转化为 unix 时间戳。
SELECT UTC_TIMESTAMP(); -- 2023-07-10 06:19:54 返回当前(国际标准时间)UTC日期和时间在 "YYYY-MM-DD HH:MM:SS" 或 "YYYYMMDDHHMMSS"格式的一个值
-- -- 时间转换
SELECT to_date('1987-07-18 00:00:00'); -- 返回 数据中的日期部分
SELECT TO_DAYS('1987-07-18 00:00:00'); -- 725935 返回date距离0000-01-01的天数
SELECT CURRENT_TIME(),TIME_TO_SEC(CURTIME()); -- 错误,后续查看原因。将时间值转换为对应的秒数
SELECT EXTRACT(YEAR FROM '1987-07-18 00:00:00'); -- 提取datetime某个指定单位的值。单位可以是year、month、day、hour、minute、second或microsecond
SELECT MAKEDATE(2021,10); -- 2021-01-10 返回指定年份和dayofyear构建的日期,dayofyear必须大于0
SELECT STR_TO_DATE('2014-12-21 12:34:56', '%Y-%m-%d %H:%i:%s'); -- 2014-12-21 12:34:56 字符串转换为日期
-- TIME_ROUND
-- 函数名 TIME_ROUND 由两部分组成,每部分由以下可选值组成
-- TIME: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
-- ROUND: FLOOR, CEIL
-- DATETIME TIME_ROUND(DATETIME expr)
-- DATETIME TIME_ROUND(DATETIME expr, INT period)
-- DATETIME TIME_ROUND(DATETIME expr, DATETIME origin)
-- DATETIME TIME_ROUND(DATETIME expr, INT period, DATETIME origin)
SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP()); -- 08:00:00 两个日期之间的差值,返回值为time类型
SELECT TIMESTAMPADD(MINUTE, 1, NOW()); -- 2023-07-10 15:07:39 日期加,单位可以是 SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,YEAR
-- INT TIMESTAMPDIFF(unit, DATETIME datetime_expr1, DATETIME datetime_expr2)
SELECT TIMESTAMPDIFF(MINUTE, NOW(), UTC_TIMESTAMP()); -- -480 以指定的单位返回两日期之间的差值