MySQL日期函数
1、DATE()
返回 日期。格式:YYYY-MM-DD
SELECT DATE(NOW());
> 2022-04-04
2、TIME()
返回 日期。格式:HH-mm-ss
SELECT TIME(NOW());
> 16:25:09
3、TIMESTAMP()
返回 日期时间。格式:YYYY-MM-DD HH-mm-ss
SELECT TIMESTAMP(NOW());
> 2022-04-04 16:31:12
4、NOW()、CURRENT_TIMESTAMP、CURRENT_TIMESTAMP()、SYSDATE()
select NOW(),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP();
> 2022-04-04 16:40:03 2022-04-04 16:40:03 2022-04-04 16:40:03
这里需要注意前三者都是**返回语句执行开始执行的时间,后者SYSDATE()不同返回的是这个函数执行时候的时间**
select SLEEP(1),NOW(),CURRENT_TIMESTAMP,CURRENT_TIMESTAMP(),SYSDATE();
> 0 2022-04-04 16:42:22 2022-04-04 16:42:22 2022-04-04 16:42:22 2022-04-04 16:42:23
这里可以看到我们利用sleep(1),让sql延时了一秒得到前三者与seelp(1)的区别SYSDATE()明显比NOW()这些多一秒,所以我们可以知道 预期结果是延时前后now()
函数对应的时间不变,sysdate()
的时间等于之前的时间加上延时时间
5、STR_TO_DATE()
根据指定的格式,将字符串转交成对应的日期或日期类型
例1、
SELECT STR_TO_DATE('2022-04-04 22:50:17','%Y-%m-%d');
> 2022-04-04
没有时分秒时这里就忽略显示了
例2、
SELECT STR_TO_DATE('2022-04-04 22:50:17','%Y-%m-%d %H');
> 2022-04-04 22:00:00
6、DATE_FORMAT()
将日期根据指定的格式返回为对应的字符串
更多日期格式
例1、
SELECT DATE_FORMAT('2022-04-04 22:50:17','%Y-%m-%d');
> 2022-04-04
例2、
SELECT DATE_FORMAT('2022-04-04 22:50:17','%Y-%m-%d %H');
> 2022-04-04 22
7、UNIX_TIMESTAMP()
获取日期的时间戳(10位)
SELECT unix_timestamp(now());
> 1649083817
8、FROM_UNIXTIME()
根据时间戳(10位)返回日期
例1、
SELECT FROM_UNIXTIME(1649087115)
> 2022-04-04 23:45:15
例2、加上第二个参数 格式化
SELECT FROM_UNIXTIME(1649087115,'%Y-%m-%d')
> 2022-04-04
9、DATEDIFF
用法:DATEDIFF(
expr1
,expr2
)
计算expr1
到expr2
的天数
# 只计算日期部分
例1、
select NOW(),DATEDIFF(NOW(),'2023-01-13 11');
> 2023-01-11 15:53:33 -2
例2、
select NOW(),DATEDIFF(NOW(),'2023-01-09');
> 2023-01-11 15:55:53 2
10、EXTRACT
用法:EXTRACT (unit FROM date) 提取对应
日期单位
(与时间间隔
相同)的值
例1、
select NOW(),EXTRACT(YEAR_MONTH from NOW())
> 2023-01-11 16:31:26 202301
例2、
select NOW(),EXTRACT(MINUTE_MICROSECOND from NOW())
> 2023-01-11 16:31:44 3144000000
11、TIMESTAMPDIFF
TIMESTAMPDIFF(unit,date1,date2)
返回日期或日期时间表达式datetime_expr1和datetime_expr2之间的整数差。结果的单位由单位参数给定
SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
> 3
SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');
> -1
12、SEC_TO_TIME
SEC_TO_TIME(SECOND)
将秒数转换成时间 格式是 00:00:00
select SEC_TO_TIME(3600);
> 01:00:00
> select SEC_TO_TIME(48);
> 00:00:48
13、TIME_TO_SEC
TIME_TO_SEC(TIME)
将时间转换为秒数。与SEC_TO_TIME相反
select TIME_TO_SEC('11:00:01');
> 39601
select TIME_TO_SEC('101:00:01');
> 363601
14、其他日期函数
函数名 | 描述 | 样例 | 结果 |
---|---|---|---|
NOW() | 获取当前日期 格式’yyyy-MM-dd HH:mm:ss’ | select NOW(); | 2022-04-04 22:50:17 |
CURDATE() | 获取当前日期 格式’yyyy-MM-dd’ | select CURDATE(); | 2022-04-04 |
CURTIME() | 获取当前日期 格式’HH:mm:ss’ | select CURTIME(); | 22:50:17 |
CURRENT_TIMESTAMP() | 获取当前日期 格式’yyyy-MM-dd HH:mm:ss’ | select CURRENT_TIMESTAMP(); | 2022-04-04 22:50:17 |
CURRENT_DATE() | 获取当前日期 格式’yyyy-MM-dd’ | select CURRENT_DATE(); | 2022-04-04 |
CURRENT_TIME() | 获取当前日期 格式’HH:mm:ss’ | select CURRENT_TIME(); | 22:50:17 |
CURRENT_TIMESTAMP | 获取当前日期 格式’yyyy-MM-dd HH:mm:ss’ | select CURRENT_TIMESTAMP; | 2022-04-04 22:50:17 |
CURRENT_DATE | 获取当前日期 格式’yyyy-MM-dd’ | select CURRENT_DATE; | 2022-04-04 |
CURRENT_TIME | 获取当前日期 格式’HH:mm:ss’ | select CURRENT_TIME; | 22:50:17 |
SYSDATE() | 获取这个函数的执行时间 格式’yyyy-MM-dd HH:mm:ss’ | select SYSDATE; | 2022-04-04 22:50:17 |
YEAR() | 获取年份 | select YEAR(NOW()) ; | 2022 |
MONTH() | 获取月份 | select MONTH(NOW()) | 4 |
DAYOFMONTH() | 获取在月份中所在的天数 | select DAYOFMONTH(NOW()) | 4 |
DAYOFYEAR() | 获取在年中所在的天数 | select DAYOFYEAR(NOW()) | 94 |
WEEKDAY() | 获取日期是星期几 (0-代表星期一、1-代表星期二) | select WEEKDAY(NOW()); | 0 |
DAYOFWEEK() | 获取日期是星期几 (1-代表星期天、2-代表星期一) | select DAYOFWEEK(NOW()); | 2 |
WEEKOFYEAR() | 获取日期是年中的第几周 | select WEEKOFYEAR(NOW()); | 14 |
TO_DAYS() | 获取从0000-00-00到日期的天数 | SELECT TO_DAYS(NOW()); | 738614 |
HOUR() | 获取小时 | SELECT HOUR(NOW()); | 22 |
MINUTE() | 获取分钟 | SELECT MINUTE(NOW()); | 50 |
SECOND() | 获取秒 | SELECT SECOND(NOW()); | 17 |
15、日期格式
格式 | 描述 |
---|---|
%Y | 年,4 位 |
%y | 年,2 位 |
%M | 月 英文表示 January |
%b | 月 英文缩写表示 Apr |
%m | 月,数值(00-12) |
%c | 月,数值(0-12) |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%j | 年的天 (001-366) |
%H | 小时 (00-23) |
%I | 小时 (01-12) 0时代表12 1时代表1 |
%k | 小时 (0-23) |
%i | 分钟,数值(00-59) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%f | 微秒 |
%T | 时间, 24-小时 (hh:mm:ss) |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%p | AM 或 PM |
%a | 星期名缩写 例如Mon |
%W | 星期名 例如Monday |
%w | 周的天 (0=星期日, 6=星期六) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
时间间隔
时间间隔用于某些函数,例如 DATE_ADD()
和 DATE_SUB()
等
*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' | 年-月 |