mysql日期相关函数使用
最近要经常用到mysql的日期相关函数,但以前用的少,索性总结下
1 DATE_FORMAT(date,format)、TIME_FORMAT(time,format)
published_at字段以datetime类型存储
format格式
| %a | 缩写星期名 |
| %b | 缩写月名 |
| %c | 月,数值 |
| %D | 带有英文前缀的月中的天 |
| %d | 月的天,数值(00-31) |
| %e | 月的天,数值(0-31) |
| %f | 微秒 |
| %H | 小时 (00-23) |
| %h | 小时 (01-12) |
| %I | 小时 (01-12) |
| %i | 分钟,数值(00-59) |
| %j | 年的天 (001-366) |
| %k | 小时 (0-23) |
| %l | 小时 (1-12) |
| %M | 月名 |
| %m | 月,数值(00-12) |
| %p | AM 或 PM |
| %r | 时间,12-小时(hh:mm:ss AM 或 PM) |
| %S | 秒(00-59) |
| %s | 秒(00-59) |
| %T | 时间, 24-小时 (hh:mm:ss) |
| %U | 周 (00-53) 星期日是一周的第一天 |
| %u | 周 (00-53) 星期一是一周的第一天 |
| %V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
| %v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
| %W | 星期名 |
| %w | 周的天 (0=星期日, 6=星期六) |
| %X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
| %x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
| %Y | 年,4 位 |
| %y | 年,2 位 |
SELECT title,published_at,DATE_FORMAT(published_at,'%Y-%m-%d'),TIME_FORMAT(published_at,'%r') FROM blog_note WHERE DATE_FORMAT(published_at,'%Y-%m')='2023-09'

2 STR_TO_DATE(str,format)
SELECT title,STR_TO_DATE(published_at,'%Y-%m-%d') FROM blog_note

3 DATE(datetime)、YEAR(datetime)

4 UNIX_TIMESTAMP(date)、FROM_UNIXTIME(timestamp,format)
SELECT title,published_at,UNIX_TIMESTAMP(published_at) ,FROM_UNIXTIME(UNIX_TIMESTAMP(published_at) ,'%Y-%m-%d %H:%i:%s') FROM blog_note

5 CURRENT_DATE()、CURRENT_TIME()、CURRENT_TIMESTAMP()
SELECT CURDATE(),CURRENT_DATE(),CURRENT_DATE

SELECT CURTIME(),CURRENT_TIME,CURRENT_TIME(),CURRENT_TIMESTAMP(),LOCALTIME(),LOCALTIMESTAMP(),NOW(),SYSDATE()

6 DATE_ADD(date,interval)、DATE_SUB(date,interval)
SELECT CURRENT_DATE(),DATE_ADD(CURRENT_DATE(),INTERVAL 1 DAY) ,DATE_ADD(CURRENT_DATE(),INTERVAL -1 DAY) ,DATE_SUB(CURRENT_DATE(),INTERVAL -1 DAY)
SELECT DATE_ADD(CURRENT_DATE(),INTERVAL 1 MONTH) ,DATE_ADD('2023-12-01',INTERVAL 1 DAY)
,DATE_ADD(NOW(),INTERVAL '1::20:30' HOUR_SECOND),DATE_ADD(NOW(),INTERVAL '1::20' YEAR_MONTH)

7 DAYOFMONTH(date)、DAYOFYEAR(date)
SELECT published_at,DAYNAME(published_at),MONTHNAME(published_at),DAYOFMONTH(published_at),DAYOFWEEK(published_at),DAYOFYEAR(published_at),LAST_DAY(published_at) FROM `blog_note`

SELECT published_at,WEEK(published_at),WEEKDAY(published_at),WEEKOFYEAR(published_at) FROM `blog_note`

8 DATEDIFF(date1,date2)、TIMEDIFF(time1,time2)
SELECT DATEDIFF('2024-01-02','2023-12-30'),TIMEDIFF('10:30:00','09:30:00'),PERIOD_ADD(202401,3),PERIOD_DIFF(202401,202310),SUBDATE(20240102,5)

9 TIME_TO_SEC(time)、SEC_TO_TIME(seconds)、
SELECT TIME_TO_SEC("10:30:00"),SEC_TO_TIME(TIME_TO_SEC("10:30:00"))

select TO_DAYS(NOW()),FROM_DAYS(TO_DAYS(NOW())),TO_DAYS('0000-01-01')

10 MAKE_DATE(year,day of year)、MAKETIME(hour,minute,second)
select makedate(2024,32),maketime(12,15,30);
