注意
想法及时记录,实现可以待做。
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