MySQL中的日期函数

发布时间 2023-12-11 14:51:59作者: 3366

1. 查看日期/时间

1.1 查看当前的日期/时间

(1)NOW():返回当前的日期时间;

(2)CURDATE():返回当前的日期;

(3)CURTIME():返回当前的时间;

SELECT NOW(),CURDATE(),CURTIME();

NOW()/CURDATE()/CURTIME()

1.2 提取指定的日期/时间成分

(1)YEAR():提取年份;

(2)MONTH():提取月份;

(3)DAY():提取天(号/日);

(4)HOUR():提取小时;

(5)MINUTE():提取分钟;

(6)SECOND():提取秒。

SELECT NOW(),YEAR(NOW()),MONTH(NOW()),DAY(NOW()),
       HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());

YEAR()/MONTH()/DAY()/HOUR()/MINUTE()/SECOND()

(7)DAYNAME():返回传入日期对应的星期数;

(8)MONTHNAME():返回传入日期对应的字符串形式的月份。

SELECT NOW(),DAYNAME(NOW()),MONTHNAME(NOW());

DAYNAME()/MONTHNAME()

(1)—(6):返回的结果是整数型,(7)—(8):返回的结果是字符型。

关于提取指定的日期/时间成分,还有一个常见的函数,那就是EXTRACT()。

(9)EXTRACT(type from date/time)

SELECT NOW(),EXTRACT(HOUR FROM NOW());

EXTRACT()

2. 格式化日期/时间

(1)DATE_FORMAT(date, format):格式化日期

SELECT NOW(),DATE_FORMAT(NOW(), '%Y%m%d');
SELECT NOW(),DATE_FORMAT(NOW(), '%Y-%m-%d');
SELECT NOW(),DATE_FORMAT(NOW(), '%y-%m-%D');
SELECT NOW(),DATE_FORMAT(NOW(), '%M %D %Y');

DATE_FORMAT(date, '%Y%m%d')

DATE_FORMAT(date, '%Y-%m-%d')

DATE_FORMAT(date, '%y-%m-%D')

DATE_FORMAT(date, '%M %D %Y')

以2023年3月5日为例:%Y——2023,%y——23,%M——March,%m——03,%D——5th,%d——05。

(2)TIME_FORMAT(time, format):格式化时间

SELECT NOW(),TIME_FORMAT(NOW(), '%H:%i:%s');
SELECT NOW(),TIME_FORMAT(NOW(), '%h:%i:%s %p');

TIME_FORMAT(time, '%H:%i:%s')

TIME_FORMAT(time, '%h:%i:%s %p')

以20:56:30为例:%H——20,%h——08,%i——56,%s——30,%p——PM。

3. 计算日期/时间

(1)DATE_ADD(date, INTERVAL expr type)

SELECT NOW(),DATE_ADD(NOW(), INTERVAL 1 DAY);  -- 当前日期 + 1天
SELECT NOW(),DATE_ADD(NOW(), INTERVAL -1 YEAR);  -- 当前日期 - 1年
SELECT NOW(),DATE_ADD(NOW(), INTERVAL 1 HOUR);  -- 当前日期 + 1小时

DATE_ADD(date, INTERVAL 1 DAY)

DATE_ADD(date, INTERVAL -1 YEAR)

DATE_ADD(date, INTERVAL 1 HOUR)

(2)DATE_SUB(date, INTERVAL expr type)

SELECT NOW(),DATE_SUB(NOW(), INTERVAL 1 YEAR);  -- 当前日期 - 1年
SELECT NOW(),DATE_SUB(NOW(), INTERVAL -1 DAY);  -- 当前日期 + 1天

DATE_SUB(date, INTERVAL 1 YEAR)

DATE_SUB(date, INTERVAL -1 DAY)

(3)DATEDIFF(expr, expr2):返回天数的间隔,不考虑时分秒,且为 expr - expr2

SELECT DATEDIFF('2023-3-5', '2023-2-5');  -- 28
SELECT DATEDIFF('2023-2-5', '2023-3-5');  -- -28

DATEDIFF('2023-3-5', '2023-2-5')

DATEDIFF('2023-2-5', '2023-3-5')

(4)TIME_TO_SEC(time):返回传入时刻与零点的秒数差,不考虑日期

SELECT TIME_TO_SEC('21:00');  -- 75600 = 21*3600
SELECT TIME_TO_SEC('21:00:02');  -- 75602 = 21*3600 + 2

TIME_TO_SEC('21:00')

TIME_TO_SEC('21:00:02')