一篇文章快速了解的MySQL时间函数

MySQL时间函数

  • 时间函数汇总
    • EXTRACT 解读
    • NOW()与SYSDATE(fsp)的区别

在日常开发中经常会遇到时间格式化,查询某一段时间的数据等,每次需要在去问问度娘,这次自己汇总了,也让度娘休息下;后期遇到时间函数会及时补充

时间函数汇总

函数 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()再次返回当前日期和时间。

你可能感兴趣的:(mysql,数据库)