> SELECT CURDATE(),CURTIME(),NOW();
->2024-01-10 | 10:47:18 | 2024-01-10 10:47:18
> select sysdate();
->2024-01-10 10:47:18
NOW()
返回当前日期时间,返回格式要么是字符串"YYYY-MM-DD HH-MM-SS"格式,要么是数字YYYYMMDDhhmmss格式,取决于使用函数上下文。
>SELECT NOW(), NOW() + 1
->2024-01-10 09:54:00|20240110095401
直接使用默认字符串,+1用作数字处理。sysdate()和now()类似。只是两个表示的时间稍微有些差别,now()表示当前语句开始执行时间点,在一个语句中多次通过now()获取时间是相同的,sysdate()而是当前时点的时间,是一直在增加的。
> SELECT NOW(), SLEEP(2), NOW();
-> 2024-01-10 14:06:49 | 0 | 2024-01-10 14:06:49
> SELECT SYSDATE(), SLEEP(2), SYSDATE();
-> 2024-01-10 14:07:03 | 0 | 2024-01-10 14:07:05
当前日期curdate,当前时间CURTIME。分别获取日期和时间部分。
> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
2024-01-10 14:19:36
有时候会将时间戳存起来记录时间,可以使用FROM_UNIXTIME将时间戳转成时间。
从日期/时间值中提取特定部分的值。语法如下:EXTRACT(unit FROM date)
EXTRACT(unit FROM date)其中,unit表示要提取的时间单位,可以是MONTH、DAY、HOUR、MINUTE等,文章最后有unit的可选值列表
date表示要提取的日期/时间值。
>SELECT EXTRACT(YEAR from NOW())
->2024
>SELECT EXTRACT(HOUR from NOW())
->9
>SELECT EXTRACT(QUARTER FROM '2019-07-02')
->3
除了使用extract函数获取对应时间部分,每一部分都有对应的函数来获取datetime指定部分的值
>SELECT YEAR(NOW()),DAY(NOW()),MONTH(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW())
-> 2024 | 10 | 1 | 10 | 12 | 41 |
DATE_ADD(date,INTERVAL expr unit),DATE_SUB(date,INTERVAL expr unit)
expr表示时间间隔间隔,可以是负数,unit表示时间单位。
date_add表示加上多少时间,date_sub(subtracted )表示减去多少时间
> SELECT DATE_ADD('2024-01-01',INTERVAL 1 DAY);
-> 2024-01-02
> SELECT DATE_ADD('2024-01-01',INTERVAL 1 YEAR);
->2025-01-01
两个日期时间差DATEDIFF()
> SELECT DATEDIFF('2023-12-31','2023-11-30');
->31
>SELECT DATEDIFF('2023-12-31 23:59:59','2024-01-09');
->-9
计算两个日期相差的天数,只有日期部分会被使用。第一个减去第二个
按指定时间单位计算时间差TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
> SELECT TIMESTAMPDIFF(MONTH,'2023-02-01','2023-05-01');
->3
> SELECT TIMESTAMPDIFF(MINUTE,'2023-12-31','2023-12-31 12:00:55');
->720
> SELECT TIMESTAMPDIFF(SECOND,'2023-12-31','2023-12-31 00:01:30')
->90
当前时间所在月份最后一天LAST_DAY(date)
> SELECT LAST_DAY(NOW());
->2024-01-31
借助last_day和date_add获取月初
>SELECT DATE_ADD(LAST_DAY(NOW()),INTERVAL 1 DAY)
->2024-01-31
> SELECT DAYOFYEAR('2023-12-31'),DAYOFMONTH('2023-12-31'),DAYOFWEEK('2023-12-31');
->365 | 31 | 1
DAYOFYEAR:一年中第几天(1~366)
DAYOFMONTH:当月第几天(1~31)
DAYOFWEEK:周几(1
= 周日, 2
= 周一, …, 7
= 周六)
DATE_FORMAT(date,format) 日期按指定格式输出。
常见格式:
年:%Y (4位年),%y(2位年)
月:%m(01~12),%M(名称January
…December
),%c (1~12没有前导0)
日:%d (01~31), %e (1~31没有前导0)
时:%H (24小时制00
…23
),%h(12小时制00~12),
分:%i(00~59)
秒:%s %S (不区分大小写,00~59)
微秒:%f (000000
…999999
)
上午下午:%p (AM或PM)
周几:%w (0周日,6周六)
一年中第几天:%j (001
…366
)
> SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s');
->2024-01-10 11:24:55
前面在一些时间函数中,如EXTRACT,TIMESTAMPDIFF,DATE_ADD中有unit时间单位参数,下面是一些时间单位的值选项说明。
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:SECONDS.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MICROSECOND |
'HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MICROSECOND |
'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |