MySQL时间函数
在日常开发中经常会遇到时间格式化,查询某一段时间的数据等,每次需要在去问问度娘,这次自己汇总了,也让度娘休息下;后期遇到时间函数会及时补充
时间函数汇总
函数 | Value | 解释 | 例子 |
---|---|---|---|
NOW() | 2020-04-23 17:50:19 | 获取当前日期和时间 | SELECT now(); |
SYSDATE(fsp) | 2020-04-24 10:45:36.142 | 获取当前日期和时间,与NOW()函数格式一样,但是SYSDATE()函数接受一个可选参数fsp,它确定结果是否应该包含从0到6的小数秒精度。 | SELECT SYSDATE(3); |
current_timestamp() | 2020-04-24 10:45:36 | 获取当前日期和时间,与NOW()函数格式一样 | SELECT current_timestamp(); |
CURDATE() | 2020-04-23 | 获取当前日期 | SELECT CURDATE(); |
DATE(NOW()) | 2020-04-23 | 获取当前日期 | SELECT DATE(NOW()); |
CURTIME() | 17:50:19 | 获取当前时间 | SELECT CURTIME(); |
DATE_SUB(NOW(),INTERVAL 1 DAY) | 2020-04-22 17:50:19 | 将日期减去指定的时间间隔 | SELECT DATE_SUB(NOW(),INTERVAL 1 DAY); |
DATE_ADD(NOW(),INTERVAL 1 DAY) | 2020-04-24 17:50:19 | 将日期添加指定的时间间隔 | SELECT DATE_ADD(NOW(),INTERVAL 1 DAY); |
DATEDIFF('2020-04-06','2020-04-01') | 5 | 获取两个日期之间的天数,当前时间在前 | SELECT DATEDIFF('2020-04-06','2020-04-01'); |
DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') | 2020-04-23 17:50:19 | 格式化日期时间 | SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s'); |
EXTRACT( YEAR FROM NOW()) | 2020 | 获取返回日期/时间的单独部分,比如年、月、日、小时、分钟等等 | SELECT EXTRACT( YEAR FROM NOW()); |
TO_DAYS( NOW()) | 737904 | 给定一个日期date, 返回一个天数 (从年份0开始的天数 ) | SELECT TO_DAYS(NOW()); |
YEAR( NOW()) | 2020 | 给定一个日期date, 返回当前时间的年份 | SELECT YEAR(NOW()); |
MONTH( NOW()) | 4 | 给定一个日期date, 返回当前时间的月份 | SELECT MONTH(NOW()); |
DAY( NOW()) | 24 | 给定一个日期date, 返回当前时间的日 | SELECT DAY(NOW()); |
WEEK( NOW(),1) | 17 | 计算日期 date 是一年中的第几周。WEEK(date,mode) 函数允许指定星期是否起始于周日或周一,以及返回值的范围是否为 0~52 或 1~53,WEEK函数接受两个参数:date是要获取周数的日期。mode是一个可选参数,用于确定周数计算的逻辑。 | SELECT WEEK(NOW(),1); |
EXTRACT 解读
EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
语法:
EXTRACT(unit FROM date)
date 参数是合法的日期表达式。unit 参数可以是下列的值:
项目 | 解释 | Value | Value |
---|---|---|---|
MICROSECOND | 返回时间或日期时间表达式expr的微秒,这个数字范围为 0 到 999999 | 0 | SELECT EXTRACT(MICROSECOND FROM NOW()) AS MICROSECOND; |
SECOND | 返回时间秒数,范围为0到59 | 38 | SELECT EXTRACT(SECOND FROM NOW()) AS SECOND; |
MINUTE | 返回时间分钟,范围为0到59 | 42 | SELECT EXTRACT(MINUTE FROM NOW()) AS MINUTE; |
HOUR | 返回时间的小时。 对于一天时间值,返回值的范围是0到23。 但是,TIME值的范围实际上要大得多,所以HOUR可以返回大于23的值 | 18 | SELECT EXTRACT(HOUR FROM NOW()) AS HOUR; |
DAY | 天 | 23 | SELECT EXTRACT(DAY FROM NOW()) AS OrderDay; |
WEEK | 16 | SELECT EXTRACT(WEEK FROM NOW()) AS WEEK; | |
MONTH | 月 | 4 | SELECT EXTRACT(MONTH FROM NOW()) AS OrderMonth; |
QUARTER | 2 | SELECT EXTRACT(QUARTER FROM NOW()) AS QUARTER; | |
YEAR | 年 | 2020 | SELECT EXTRACT(YEAR FROM NOW()) AS OrderYear; |
SECOND_MICROSECOND | 42000000 | SELECT EXTRACT(SECOND_MICROSECOND FROM NOW()) AS '1'; | |
MINUTE_MICROSECOND | 4842000000 | SELECT EXTRACT(MINUTE_MICROSECOND FROM NOW()) AS '2'; | |
MINUTE_SECOND | 4842 | SELECT EXTRACT(MINUTE_SECOND FROM NOW()) AS '3'; | |
HOUR_MICROSECOND | 184843000000 | SELECT EXTRACT(HOUR_MICROSECOND FROM NOW()) AS '4'; | |
HOUR_SECOND | 184843 | SELECT EXTRACT(HOUR_SECOND FROM NOW()) AS '5'; | |
HOUR_MINUTE | 1848 | SELECT EXTRACT(HOUR_MINUTE FROM NOW()) AS '6'; | |
DAY_MICROSECOND | 184843000000 | SELECT EXTRACT(DAY_MICROSECOND FROM NOW()) AS '7'; | |
DAY_SECOND | 184843 | SELECT EXTRACT(DAY_SECOND FROM NOW()) AS '8'; | |
DAY_MINUTE | 1848 | SELECT EXTRACT(DAY_MINUTE FROM NOW()) AS '9'; | |
DAY_HOUR | 18 | SELECT EXTRACT(DAY_HOUR FROM NOW()) AS '10'; | |
YEAR_MONTH | 202004 | SELECT EXTRACT(YEAR_MONTH FROM NOW()) AS '11'; |
时间问题==EXTRACT== 函数中的 ==Unit==值解释后期增加
NOW()与SYSDATE(fsp)的区别
NOW([fsp])
返回当前日期和时间作为值的形式 或 格式,具体取决于该函数是在字符串环境中还是在数字环境中使用。该值以会话时区表示。 'YYYY-MM-DD hh:mm:ss'YYYYMMDDhhmmss
如果fsp给定参数指定从0到6的小数秒精度,则返回值包括该位数的小数秒部分。
mysql> SELECT NOW();
-> '2020-04-24 23:50:26'
mysql> SELECT NOW() + 0;
-> 20071215235026.000000
NOW()返回一个恒定时间,该时间指示该语句开始执行的时间。(在存储的函数或触发器内, NOW()返回函数或触发语句开始执行的时间。)这与的行为不同SYSDATE(),后者的行为 返回执行的确切时间。
mysql> SELECT NOW(), SLEEP(2), NOW();
+---------------------+----------+---------------------+
| NOW() | SLEEP(2) | NOW() |
+---------------------+----------+---------------------+
| 2020-04-24 13:47:36 | 0 | 2020-04-24 13:47:36 |
+---------------------+----------+---------------------+
mysql> SELECT SYSDATE(), SLEEP(2), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE() | SLEEP(2) | SYSDATE() |
+---------------------+----------+---------------------+
| 2020-04-24 13:47:44 | 0 | 2020-04-24 13:47:46 |
+---------------------+----------+---------------------+
另外,该SET TIMESTAMP语句会影响NOW()而不是所 返回的值 SYSDATE()。这意味着二进制日志中的时间戳设置对的调用没有影响SYSDATE()。将时间戳记设置为非零值会导致每次随后的调用NOW() 返回该值。将时间戳设置为零会取消此效果,以便NOW()再次返回当前日期和时间。
网友评论