返回日期date是星期几(1=星期天,2=星期一,……7=星期六,ODBC标准)
mysql> select DAYOFWEEK('2017-10-01');
-> 1
返回日期date是星期几(0=星期一,1=星期二,……6= 星期天)。
mysql> select WEEKDAY('2017-10-01 22:23:00');
-> 6
mysql> select WEEKDAY('2017-10-02');
-> 0
返回date是一月中的第几日(在1到31范围内)
mysql>select DAYOFMONTH('2017-10-08'); ;
-> 3
返回date是一年中的第几日(在1到366范围内)
mysql> select DAYOFYEAR('2017-10-08');
-> 34
返回date中的月份数值
mysql> select MONTH('2017-10-08');
-> 2
返回date是星期几(按英文名返回)
mysql> select DAYNAME("2017-10-08");
-> 'Sunday'
返回date是几月(按英文名返回)
mysql> select MONTHNAME("2017-10-08");
-> 'October'
返回date是一年的第几个季度
mysql> select QUARTER('89-11-04');
-> 4
返回date是一年的第几周(first默认值0,first取值1表示周一是周的开始,0从周日开始) >2017-10-08 周日
mysql> select WEEK('2017-10-08');
-> 41
mysql> select WEEK('2017-10-08',0);
-> 41
mysql> select WEEK('2017-10-08',1);
-> 40
返回date的年份(范围在1000到9999)
mysql> select YEAR('17-10-08');
-> 2017
返回time的小时数(范围是0到23)
mysql> select HOUR('10:06:08');
-> 10
返回time的分钟数(范围是0到59)
mysql> select MINUTE('89-11-04 10:06:08');
-> 6
返回time的秒数(范围是0到59)
mysql> select SECOND('10:06:08');
-> 8
增加N个月到时期P并返回(P的格式YYMM或YYYYMM)
mysql> select PERIOD_ADD(8911,2);
-> 199001
返回在时期P1和P2之间月数(P1和P2的格式YYMM或YYYYMM)
mysql> select PERIOD_DIFF(201710,201706);
-> 4
DATE_SUB(date,INTERVAL expr type)
ADDDATE(date,INTERVAL expr type)
SUBDATE(date,INTERVAL expr type)
对日期时间进行加减法运算
(ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数
date是一个DATETIME或DATE值,
expr对date进行加减法的一个表达式字符串,
type指明表达式expr应该如何被解释,
[type值 含义 期望的expr格式]:
类型(type值) | 含义 | expr表达式的形式 |
---|---|---|
YEAR | 年 | YY |
MONTH | 月 | MM |
DAY | 日 | DD |
HOUR | 时 | hh |
MINUTE | 分 | mm |
SECOND | 秒 | ss |
YEAR_MONTH | 年和月 | YY和MM之间用任意符号隔开 |
DAY_HOUR | 日和小时 | DD和hh之间用任意符号隔开 |
DAY_MINUTE | 日和分钟 | DD和mm之间用任意符号隔开 |
DAY_SECOND | 日和秒钟 | DD和ss之间用任意符号隔开 |
HOUR_MINUTE | 时和分 | hh和mm之间用任意符号隔开 |
HOUR_SECOND | 时和秒 | hh和ss之间用任意符号隔开 |
MINUTE_SECOND | 分和秒 | mm和ss之间用任意符号隔开 |
如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)
如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)
-> 1998-01-01 00:00:00
mysql> SELECT INTERVAL 1 DAY "1997-12-31";
-> 1998-01-01
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;
-> 1997-12-31 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);
-> 1998-01-01 00:00:00
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);
-> 1998-01-01 23:59:59
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);
-> 1998-01-01 00:01:00
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);
-> 1997-12-30 22:58:59
mysql> SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);
-> 1997-12-30 14:00:00
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);
-> 1997-12-02
TO_DAYS(date)
返回日期date是西元0年至今多少天(不计算1582年以前)
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669
给出西元0年至今多少天返回DATE值(不计算1582年以前)
mysql> select FROM_DAYS(729669);
-> '1997-10-07'
CURDATE() 或者 CURRENT_DATE()
以'YYYY-MM-DD'或YYYYMMDD格式返回当前日期值(根据返回值所处上下文是字符串或数字)
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() ;
->'1997-12-15'
CURTIME() 或者 CURRENT_TIME()
以'HH:MM:SS'或HHMMSS格式返回当前时间值(根据返回值所处上下文是字符串或数字)
mysql> select CURTIME();
-> '16:55:06'
mysql> select CURTIME() ;
-> ‘16:55:06’
NOW() 、SYSDATE()、 CURRENT_TIMESTAMP()
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前日期时间(根据返回值所处上下文是字符串或数字)
mysql> select NOW();
-> '2017-09-25 16:56:21'
mysql> select SYSDATE();
->'2017-09-25 16:56:21'
mysql> select SYSDATE();
->'2017-09-25 16:56:21'
UNIX_TIMESTAMP() 或者UNIX_TIMESTAMP(date)
返回一个Unix时间戳(从'1970-01-01 00:00:00'GMT开始的秒数,date默认值为当前时间)
mysql> select UNIX_TIMESTAMP();
-> 1506330015
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875974980
FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回时间戳的值(根据返回值所处上下文是字符串或数字)
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) 0;
-> 19971004222300
FROM_UNIXTIME(unix_timestamp,format)
以format字符串格式返回时间戳的值
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'
SEC_TO_TIME(seconds)
以'HH:MM:SS'或HHMMSS格式返回秒数转成的TIME值(根据返回值所处上下文是字符串或数字)
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) 0;
-> 3938
TIME_TO_SEC(time)
返回time值有多少秒
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378
DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
语法
DATE_FORMAT(date,format)
date 参数是合法的日期。format 规定日期/时间的输出格式。
可以使用的格式有:
格式 | 描述 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:
DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p') DATE_FORMAT(NOW(),'%m-%d-%Y') DATE_FORMAT(NOW(),'%d %b %y') DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
结果类似:
Dec 29 2008 11:45 PM 12-29-2008 29 Dec 08 29 Dec 2008 16:25:46.635
TIME_FORMAT(time,format) 和 DATE_FORMAT() 类似,但TIME_FORMAT只处理小时、分钟和秒(其余符号产生一个NULL值或0)
Value | Description |
---|---|
%f | Microseconds (000000 to 999999) %f is available starting in MySQL 4.1.1 |
%H | Hour (00 to 23 generally, but can be higher) |
%h | Hour (00 to 12) |
%I | Hour (00 to 12) |
%i | Minutes (00 to 59) |
%p | AM or PM |
%r | Time in 12 hour AM or PM format (hh:mm:ss AM/PM) |
%S | Seconds (00 to 59) |
%s | Seconds (00 to 59) |
%T | Time in 24 hour format (hh:mm:ss) |
mysql> SELECT TIME_FORMAT('15:02:28', '%H %i %s'); Result: '15 02 28' mysql> SELECT TIME_FORMAT('15:02:28', '%h:%i:%s %p'); Result: '03:02:28 PM' mysql> SELECT TIME_FORMAT('15:02:28', '%h:%i%p'); Result: '03:02PM' mysql> SELECT TIME_FORMAT('17:42:03.000001', '%r'); Result: '05:42:03 PM' mysql> SELECT TIME_FORMAT('17:42:03.000001', '%T'); Result: '17:42:03' mysql> SELECT TIME_FORMAT('07:42:03.000001', '%f'); Result: '000001'