常用日期函数
DATE_FORMAT(date,format) 把日期进行格式化
其中 date 参数是合法的日期(不可为时间戳),format 参数则规定日期/时间的输出格式,可以使用的格式有:
FROM_UNIXTIME(unix_timestamp ,format) 把时间戳格式化成一个日期
eg : SELECT FROM_UNIXTIME(1234567890, ‘%Y-%m-%d %H:%i:%S’)
其中 unix_timestamp 参数为要转换的时间戳,format 参数则规定日期/时间的输出格式,他可以使用的格式和 DATE_FORMAT() 函数基本一致,这里不再列出。
UNIX_TIMESTAMP(date ) 函数将 MySQL 中存储为日期的数据转换成时间戳, 。它只有一个参数,date 为合法的日期
DATE(date) 函数返回日期或日期/时间表达式的日期部分(返回‘年-月-日’)。
EXTRACT() 函数
函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
若非,测试。否则绝对不能使用 中文 表示字段名,切记。
SELECT EXTRACT(YEAR FROM created_time) AS 年 ,
EXTRACT(MONTH FROM created_time) AS 月,
EXTRACT(DAY FROM created_time) AS 日
FROM test
ORDER BY created_time DESC
也可以用year()=DAYOFYEAR() month() day()=dayofmonth() 函数更方便!
参考:添加链接描述
DAYOFWEEK(date)
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK('2019-03-26');
-> 3
WEEKDAY(date)
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql> select WEEKDAY('2019-03-26 22:23:00');
-> 1
mysql> select WEEKDAY('2019-03-25');
-> 0
DAYNAME(date)
返回date的星期名字。
mysql> select DAYNAME("2019-03-26");
-> 'Thursday'
MONTHNAME(date)
返回date的月份名字。
mysql> select MONTHNAME("2019-03-26");
-> 'March'
QUARTER(date)
返回date一年中的季度,范围1到4。
mysql> select QUARTER('2019-03-26');
-> 1
TO_DAYS(date)
返回从0开始的天数
--取date_col的值在最后30天以内:
SELECT something FROM table WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;
参考:添加链接描述
差值计算
- 计算天数差值,忽略时间部分
SELECT now(),DATEDIFF(now(),birthday) from stu;
- 计算时间差值,忽略天数
SELECT now(),TIMEDIFF(time(birthday),time(now())) from stu;
- 指定单位差值
支持的单位有 YEAR/MONTH/WEEK/DAY/HOUR/MINUTE/SECOND等。下面是获取学生来到人生经历的天数。
select sname,TIMESTAMPDIFF(day,birthday,NOW()) from stu;
时间计算
函数 说明
- ADDTIME 添加时间(负数为减少),只对时间有效
- TIMESTAMP 添加时间(负数为减少),只对时间有效
- DATE_ADD 根据单位添加时间,支持单位有YEAR/MONTH/DAY/HOUR/MINUTE/SECOND/HOUR_MINUTE/DAY_HOUR/DAY_MINUTE/DAY_SECOND/HOUR_MINUTE/HOUR_SECOND(负数时等于DATE_SUB)
- DATE_SUB DATE_ADD的反函数
- LAST_DAY 指定月最后一天日期
七小时前的时间
select ADDTIME(now(),'-7:00:00')
七天后的日期
SELECT DATE_ADD(now(),INTERVAL 7 DAY);
20小时10分钟后的日期
SELECT DATE_ADD(NOW(),INTERVAL '20:10' HOUR_MINUTE);
2天8小时后的日期
SELECT DATE_ADD(NOW(),INTERVAL '2 8' DAY_HOUR);
获取本月最后一天日期
SELECT LAST_DAY(now());
获取本月的第一天日期
SELECT DATE_SUB(now(),INTERVAL DAYOFMONTH(now())-1 DAY);