1 获取日期时间相关
- 获取当前日期时间
SELECT
NOW(), # sql 执行时的时间
SYSDATE(), # 方法运行时的时间
CURDATE(),# 当前日期 同CURRENT_DATE ()
CURTIME(),# 当前时间 同CURRENT_TIME()
CURRENT_TIMESTAMP (),
UNIX_TIMESTAMP(),
SLEEP(2),
NOW(),
SYSDATE()
- 获取指定时间的年、季度、月、日、时、分、秒、date、time
SELECT
YEAR (NOW()),
QUARTER (NOW()),
MONTH (NOW()),
DAY (NOW()),
HOUR (NOW()),
MINUTE (NOW()),
SECOND (NOW()),
DATE(NOW()),
TIME(NOW())
- 其他
SELECT
WEEK (NOW()), #所在周数 0开始
WEEKOFYEAR(NOW()),#所在周数 1 开始
WEEKDAY(NOW()),# 0代表周一
DAYOFWEEK(NOW()),# 1代表周日
DAYOFMONTH(NOW()),# 1,2,3....31
DAYOFYEAR(NOW()),# 1,2,3....366
YEARWEEK(NOW())# 年份周数
2 日期时间转换
-
UNIX_TIMESTAMP()
unix_timestamp()方法中的可选参数DATE字符串 YYYY-MM-DD
DATETIME字符串 YYYY-MM-DD HH:MM:SS
TIMESTAMP YYYY-MM-DD HH:MM:SS
数字格式YYYYMMDD (20211223)
数字格式YYYYMMDDHHmmss (20211223101008) -
FROM_UNIXTIME(unix_timestamp,[format])
时间戳格式化成响应的时间格式 -
DATE_FORMAT(date,format)
日期格式化成响应的时间格式format 格式
格式 描述 参考值 %a 缩写星期名 Wed %W 星期名 Wednesday %w 周的天 (0=星期日, 6=星期六) 3 %b 缩写月名 Dec %M 月名 December %c 月,数值 2 %m 月,数值(00-12) 02 %D 带有英文前缀的月中的天 29th %d 月的天,数值(00-31) 05 %e 月的天,数值(0-31) 5 %H 小时 (00-23) 13 %h 小时 (01-12) 01 %k 小时 (0-23) 1 %i 分钟,数值(00-59) 31 %j 年的天 (001-366) 363 %p AM 或 PM AM %r 时间,12-小时(hh:mm:ss AM 或 PM) 01:28:05 PM %S %s 秒(00-59) 03 %T 时间, 24-小时 (hh:mm:ss) 13:28:05 %U %u 周 (00-53) 星期日是一周的第一天 00起始(1月1号不是周日) %V 周 (01-53) 星期日是一周的第一天,与 %X 使用 01起始(1月1号不是周日,算上一年度的) %X 年,星期日是周的第一天,与 %V 使用 2021.1.1 周五,使用 ‘%X%V’ 得202052 %Y 年,4 位 2021 %y 年,2 位 21
3 日期时间计算相关
- ADDTIME | SUBTIME
时间的加减,分和秒数字不能超过60
SELECT
NOW(),
ADDTIME(NOW(), '59'),#59秒
SUBTIME(NOW(), '59'),
ADDTIME(NOW(), '5959'),#59分59秒
SUBTIME(NOW(), '5959'),
ADDTIME(NOW(), '1005959'),#100时59分59秒
SUBTIME(NOW(), '1005959')
- ADDDATE | SUBDATE
ADDDATE(date,INTERVAL expr unit)
ADDDATE(expr,days)
SELECT
NOW(),
ADDDATE(NOW(), 1),
SUBDATE(NOW(), 1),
ADDDATE(NOW(), INTERVAL 1 DAY),
SUBDATE(NOW(), INTERVAL 1 DAY)
- DATE_ADD | DATE_SUB
DATE_ADD(date,INTERVAL expr unit)
DATE_SUB(date,INTERVAL expr unit)
SELECT
NOW(),
DATE_ADD(NOW(), INTERVAL 1 DAY),
DATE_SUB(NOW(), INTERVAL 1 DAY)
- PERIOD_ADD
SELECT
NOW(),
PERIOD_ADD(date_format(NOW(),'%Y%m'),1) A
-
TIMEDIFF | DATEDIFF | PERIOD_DIFF | TIMESTAMPDIFF
TIMEDIFF 返回两者相差的时间SELECT TIMEDIFF('2021-12-30 11:11:11','2021-12-29 11:11:11') 24:00:00
DATEDIFF 返回两者之间相差的天数
SELECT DATEDIFF('2021-12-29','2021-12-30') -1
PERIOD_DIFF(P1,P2) 返回两者之间相差的月份 参数格式均为YYYYMM或者YYMM
SELECT PERIOD_DIFF('202112','202111') 1
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2) 通过unit(天(DAY)、小时(HOUR),分钟(MINUTE)和秒(SECOND))返回指定格式的时间间隔
SELECT TIMESTAMPDIFF(DAY,'2021-12-28 11:11:11','2021-12-29 10:11:11'), TIMESTAMPDIFF(HOUR,'2021-12-28 11:11:11','2021-12-29 10:11:11'), TIMESTAMPDIFF(MINUTE,'2021-12-28','2021-12-29'), TIMESTAMPDIFF(SECOND,'2021-12-28','2021-12-29')
unit 参数
unit | 含义 |
---|---|
MICROSECOND | 微秒 (千分之一毫秒) |
SECOND | 秒 |
MINUTE | 分 |
HOUR | 时 |
DAY | 天 |
WEEK | 周 |
MONTH | 月 |
QUARTER | 季度 |
YEAR | 年 |
SECOND_MICROSECOND | 几秒又几十万毫秒 |
MINUTE_MICROSECOND | 几分又几秒又几十万毫秒 |
MINUTE_SECOND | 几分又几秒 |
HOUR_MICROSECOND | 几小时又几分又几秒又几十万毫秒 |
HOUR_SECOND | 几小时又几分又几秒 |
HOUR_MINUTE | 几小时又几分 |
DAY_MICROSECOND | 几天又几小时又几分又几秒又几十万毫秒 |
DAY_SECOND | 几天又几小时又几分又几秒 |
DAY_MINUTE | 几天又几小时又几分 |
DAY_HOUR | 几天又几小时 |
YEAR_MONTH | 几年又几月 |
SELECT
NOW(),
ADDDATE(NOW(), INTERVAL '1 1' SECOND_MICROSECOND) A,
ADDDATE(NOW(), INTERVAL '1 1 1' MINUTE_MICROSECOND) B,
ADDDATE(NOW(), INTERVAL '1 1' MINUTE_SECOND) C,
ADDDATE(NOW(), INTERVAL '1 1 1 1' HOUR_MICROSECOND) D,
ADDDATE(NOW(), INTERVAL '1 1 1' HOUR_SECOND) E,
ADDDATE(NOW(), INTERVAL '1 1' HOUR_MINUTE) F,
ADDDATE(NOW(), INTERVAL '1 1 1 1 1' DAY_MICROSECOND) H,
ADDDATE(NOW(), INTERVAL '1 1 1 1' DAY_SECOND) G,
ADDDATE(NOW(), INTERVAL '1 1 1' DAY_MINUTE) Q,
ADDDATE(NOW(), INTERVAL '1 1' DAY_HOUR) W,
ADDDATE(NOW(), INTERVAL '1 1' YEAR_MONTH) E