MySQL日期时间函数的使用

MySQL日期时间函数的使用

Posted by qin4zhang on November 30, 2019

注意

想法及时记录,实现可以待做。

MySQL函数的使用

本文记录工作中常使用到的MYSQL的函数,更多用法,可以参考MySQL文档

CURDATE(), CURRENT_DATE, CURRENT_DATE()

'YYYY-MM-DD'或者YYYYMMDD返回当前的日期,这个取决于是返回的字符串还是数字格式。

mysql> SELECT CURDATE();
        -> '2008-06-13'
mysql> SELECT CURDATE() + 0;
        -> 20080613

CURRENT_TIMESTAMP, CURRENT_TIMESTAMP(), NOW()

mysql> SELECT NOW();
        -> '2007-12-15 23:50:26'
mysql> SELECT NOW() + 0;
        -> 20071215235026.000000

DATE_ADD(date,INTERVAL expr unit), DATE_SUB(date,INTERVAL expr unit)

mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);
        -> '2018-05-02'
mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);
        -> '2017-05-01'
mysql> SELECT DATE_ADD('2020-12-31 23:59:59',
    ->                 INTERVAL 1 SECOND);
        -> '2021-01-01 00:00:00'
mysql> SELECT DATE_ADD('2018-12-31 23:59:59',
    ->                 INTERVAL 1 DAY);
        -> '2019-01-01 23:59:59'
mysql> SELECT DATE_ADD('2100-12-31 23:59:59',
    ->                 INTERVAL '1:1' MINUTE_SECOND);
        -> '2101-01-01 00:01:00'
mysql> SELECT DATE_SUB('2025-01-01 00:00:00',
    ->                 INTERVAL '1 1:1:1' DAY_SECOND);
        -> '2024-12-30 22:58:59'
mysql> SELECT DATE_ADD('1900-01-01 00:00:00',
    ->                 INTERVAL '-1 10' DAY_HOUR);
        -> '1899-12-30 14:00:00'
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
        -> '1997-12-02'
mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002',
    ->            INTERVAL '1.999999' SECOND_MICROSECOND);
        -> '1993-01-01 00:00:01.000001'

DATE_FORMAT(date,format)

标识符 描述
%a 周,比如Sun..Sat
%b 月,比如Jan..Dec
%c 数字月,比如0..12
%D 带有英文后缀的每月的某天,比如0th, 1st, 2nd, 3rd, …
%d 某天,比如00..31
%e 某天,比如0..31
%f 毫秒,比如000000..999999
%H 24小时,比如00..23
%h 12小时,比如01..12
%I 12小时,比如01..12
%i 分钟,比如00..59
%j 年的某天,比如001..366
%k 24小时,比如0..23
%l 12小时,比如1..12
%M 月的名称,比如January..December
%m 数字月,比如00..12
%p 上午还是下午,比如AM or PM
%r 12小时的时间,带尾缀,比如hh:mm:ss AM
%S 秒,比如00..59
%s 秒,比如00..59
%T 24小时的时间,比如hh:mm:ss
%U 第几周,周日是第一天,比如00..53
%u 第几周,周一是第一天,比如00..53
%W 周的名字,比如Sunday..Saturday
%w 一周的第几天,比如0=Sunday..6=Saturday
%Y 年,4位数字,比如2020
%y 年,2位数字,比如20
mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');
        -> 'Sunday October 2009'
mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');
        -> '22:23:00'
mysql> SELECT DATE_FORMAT('1900-10-04 22:23:00',
    ->                 '%D %y %a %d %m %b %j');
        -> '4th 00 Thu 04 10 Oct 277'
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00',
    ->                 '%H %k %I %r %T %S %w');
        -> '22 22 10 10:23:00 PM 22:23:00 00 6'
mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V');
        -> '1998 52'
mysql> SELECT DATE_FORMAT('2006-06-00', '%d');
        -> '00'

DATEDIFF(expr1,expr2)

expr1 - expr2 的值,以天为单位,如果参数是带有时间,则截取日期去计算。

mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
        -> 1
mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');
        -> -31

FROM_UNIXTIME(unix_timestamp[,format])

将时间戳UTC进行格式化处理。

mysql> SELECT FROM_UNIXTIME(1447430881);
        -> '2015-11-13 10:08:01'
mysql> SELECT FROM_UNIXTIME(1447430881) + 0;
        -> 20151113100801
mysql> SELECT FROM_UNIXTIME(1447430881,
    ->                      '%Y %D %M %h:%i:%s %x');
        -> '2015 13th November 10:08:01 2015'

UNIX_TIMESTAMP([date])

将日期转为UTC时间戳,时间为 秒。

mysql> SELECT UNIX_TIMESTAMP();
        -> 1447431666
mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');
        -> 1447431619
mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19.012');
        -> 1447431619.012

LAST_DAY(date)

获取日期的所在月份的最后一天,如果是无效的日期,则返回NULL。

mysql> SELECT LAST_DAY('2003-02-05');
        -> '2003-02-28'
mysql> SELECT LAST_DAY('2004-02-05');
        -> '2004-02-29'
mysql> SELECT LAST_DAY('2004-01-01 01:01:01');
        -> '2004-01-31'
mysql> SELECT LAST_DAY('2003-03-32');
        -> NULL

QUARTER(date)

获取日期这天是哪一个季度,季度从1开始计算。

mysql> SELECT QUARTER('2008-04-01');
        -> 2