函数名称 | 函数功能说明 |
---|---|
ADDDATE() |
添加日期 |
ADDTIME() |
添加时间 |
CONVERT_TZ() |
转换不同时区 |
CURDATE() |
返回当前日期 |
CURRENT_DATE() 与 CURRENT_DATE |
等同于 CURDATE() |
CURRENT_TIME() 与 CURRENT_TIME |
等同于 CURTIME() |
CURRENT_TIMESTAMP() 与 CURRENT_TIMESTAMP |
等同于 NOW() |
CURTIME() |
返回当前时间 |
DATE_ADD() |
添加两个日期 |
DATE_FORMAT() |
按指定方式格式化日期 |
DATE_SUB() |
求解两个日期的间隔 |
DATE() |
提取日期或日期时间表达式中的日期部分 |
DATEDIFF() |
求解两个日期的间隔 |
DAY() |
等同于 DAYOFMONTH() |
DAYNAME() |
返回星期中某天的名称 |
DAYOFMONTH() |
返回一月中某天的序号(1-31) |
DAYOFWEEK() |
返回参数所定影的一周中某天的索引值 |
DAYOFYEAR() |
返回一年中某天的序号(1-366) |
EXTRACT |
提取日期中的相应部分 |
FROM_DAYS() |
将一个天数序号转变为日期值 |
FROM_UNIXTIME() |
将日期格式化为 UNIX 的时间戳 |
HOUR() |
提取时间 |
LAST_DAY |
根据参数,返回月中最后一天 |
LOCALTIME() 和 LOCALTIME |
等同于 NOW() |
LOCALTIMESTAMP 和 LOCALTIMESTAMP() |
等同于 NOW() |
MAKEDATE() |
基于给定参数年份和所在年中的天数序号,返回一个日期 |
MAKETIME |
MAKETIME() |
MICROSECOND() |
返回参数所对应的毫秒数 |
MINUTE() |
返回参数对应的分钟数 |
MONTH() |
返回传入日期所对应的月序数 |
MONTHNAME() |
返回月的名称 |
NOW() |
返回当前日期与时间 |
PERIOD_ADD() |
为年-月组合日期添加一个时段 |
PERIOD_DIFF() |
返回两个时段之间的月份差值 |
QUARTER() |
返回日期参数所对应的季度序号 |
SEC_TO_TIME() |
将描述转变成 'HH:MM:SS' 的格式 |
SECOND() |
返回秒序号(0-59) |
STR_TO_DATE() |
将字符串转变为日期 |
SUBDATE() |
三个参数的版本相当于 DATE_SUB() |
SUBTIME() |
计算时间差值 |
SYSDATE() |
返回函数执行时的时间 |
TIME_FORMAT() |
提取参数中的时间部分 |
TIME_TO_SEC() |
将参数转化为秒数 |
TIME() |
提取传入表达式的时间部分 |
TIMEDIFF() |
计算时间差值 |
TIMESTAMP() |
单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 |
TIMESTAMPADD() |
为日期时间表达式添加一个间隔 INTERVAL |
TIMESTAMPDIFF() |
从日期时间表达式中减去一个间隔 INTERVAL |
TO_DAYS() |
返回转换成天数的日期参数 |
UNIX_TIMESTAMP() |
返回一个 UNIX 时间戳 |
UTC_DATE() |
返回当前的 UTC 日期 |
UTC_TIME() |
返回当前的 UTC 时间 |
UTC_TIMESTAMP() |
返回当前的 UTC 时间与日期 |
WEEK() |
返回周序号 |
WEEKDAY() |
返回某天在星期中的索引值 |
WEEKOFYEAR() |
返回日期所对应的星期在一年当中的序号(1-53) |
YEAR() |
返回年份 |
YEARWEEK() |
返回年份及星期序号 |
ADDDATE(date,INTERVAL expr unit), ADDDATE(expr,days)
在第2个参数使用 INTERVAL 格式时,ADDDATE()
作用就相当于 DATE_ADD()
。相关的函数 SUBDATE()
相当于 DATE_SUB()
。要想了解 INTERVAL 单位参数,参看DATE_ADD()
相关内容。示例如下:
mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1998-02-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| ADDDATE('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1998-02-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
当函数的第2个参数采用 days
格式时,MySQL 会认为它是一个表示天数的整数,将它添加到 expr
上。示例如下:
mysql> SELECT ADDDATE('1998-01-02', 31);
+---------------------------------------------------------+
| DATE_ADD('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1998-02-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
ADDTIME(expr1, expr2)
ADDTIME()
将 expr2 参数加到 expr1 参数上,返回结果。expr1 是一个时间或日期时间表达式。expr2 是一个时间表达式。
mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002');
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59.999999','1 1:1:1.000002') |
+---------------------------------------------------------+
| 1998-01-02 01:01:01.000001 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CONVERT_TZ(dt,from_tz,to_tz)
这是一个转换时区的函数,将参数 from_tz
所定时区的日期时间值 dt
转变到参数 to_tz
所定时区,然后返回结果。如果参数无效,则该函数返回 NULL 值。
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','GMT','MET') |
+---------------------------------------------------------+
| 2004-01-01 13:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00');
+---------------------------------------------------------+
| CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00') |
+---------------------------------------------------------+
| 2004-01-01 22:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CURDATE()
返回当前日期的函数。根据函数究竟用于字符串还是数字上下文,选择使用 'YYYY-MM-DD'('年-月-日') 或 YYYYMMDD(年月日) 格式返回当前日期。
mysql> SELECT CURDATE();
+---------------------------------------------------------+
| CURDATE() |
+---------------------------------------------------------+
| 1997-12-15 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CURDATE() + 0;
+---------------------------------------------------------+
| CURDATE() + 0 |
+---------------------------------------------------------+
| 19971215 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CURRENT_DATE
和 CURRENT_DATE()
CURRENT_DATE
和 CURRENT_DATE()
实际上等于 CURDATE()
。
CURTIME()
根据函数究竟用于字符串或数字上下文,选择以 'HH:MM:SS' 还是 HHMMSS 格式返回当前时间值(以当前时区来定)。
mysql> SELECT CURTIME();
+---------------------------------------------------------+
| CURTIME() |
+---------------------------------------------------------+
| 23:50:26 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CURTIME() + 0;
+---------------------------------------------------------+
| CURTIME() + 0 |
+---------------------------------------------------------+
| 235026 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
CURRENT_TIME 和 CURRENT_TIME()
CURRENT_TIME
和 CURRENT_TIME()
都相当于 CURTIME()
。
CURRENT_TIMESTAMP 和 CURRENT_TIMESTAMP()
CURRENT_TIMESTAMP
和 CURRENT_TIMESTAMP()
实际上相当于 NOW()
。
DATE(expr)
提取日期或日期时间表达式 expr
中的日期部分。
mysql> SELECT DATE('2003-12-31 01:02:03');
+---------------------------------------------------------+
| DATE('2003-12-31 01:02:03') |
+---------------------------------------------------------+
| 2003-12-31 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DATEDIFF(expr1,expr2)
DATEDIFF()
将返回expr1 - expr2
的值,用来表示两个日期相差的天数。expr1
和 expr2
都是日期或日期时间表达式。运算中只用到了这些值的日期部分。
mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
+---------------------------------------------------------+
| DATEDIFF('1997-12-31 23:59:59','1997-12-30') |
+---------------------------------------------------------+
| 1 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DATE_ADD(date,INTERVAL expr unit) 与 DATE_SUB(date,INTERVAL expr unit)
执行日期计算的两种函数。date
是一个用来指定开始日期的 DATETIME 或 DATE 值。expr
是一种以字符串形式呈现的表达式,用来指定从开始日期增加或减少的间隔值。如果是负的间隔值,则 expr
值的第一个字符是-
号。unit
是一个单位关键字,用来指定expr表达式应该采取的单位。
INTERVAL 关键字与单位说明符都不区分大小写。
下表列出了每个单位数值所对应的 expr 参数的期望格式。
单位所能取的值 | 期望的expr格式 |
---|---|
MICROSECOND |
毫秒 |
SECOND |
秒 |
MINUTE |
分 |
HOUR |
小时 |
DAY |
日 |
WEEK |
周 |
MONTH |
月 |
QUARTER |
季度 |
YEAR |
年 |
SECOND_MICROSECOND |
'秒.毫秒' |
MINUTE_MICROSECOND |
'分.毫秒' |
MINUTE_SECOND |
'分:秒' |
HOUR_MICROSECOND |
'小时.毫秒' |
HOUR_SECOND |
'小时:分:秒' |
HOUR_MINUTE |
'小时:分' |
DAY_MICROSECOND |
'日.毫秒' |
DAY_SECOND |
'日 小时:分:秒' |
DAY_MINUTE |
'日 小时:分' |
DAY_HOUR |
'日 小时' |
YEAR_MONTH |
'年-月' |
QUARTER 和 WEEK 都是 MySQL 5.0.0 才开始引入的单位值。
mysql> SELECT DATE_ADD('1997-12-31 23:59:59',
-> INTERVAL '1:1' MINUTE_SECOND);
+---------------------------------------------------------+
| DATE_ADD('1997-12-31 23:59:59', INTERVAL... |
+---------------------------------------------------------+
| 1998-01-01 00:01:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR);
+---------------------------------------------------------+
| DATE_ADD('1999-01-01', INTERVAL 1 HOUR) |
+---------------------------------------------------------+
| 1999-01-01 01:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DATE_FORMAT(date,format)
该函数会根据 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)或下午(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 |
一星期中各日名称(Sunday...Saturday) |
%w |
一星期中各日名称(0代表星期日,6代表星期六,以此类推) |
%X |
某星期所处年份。其中,星期天是每星期的开始日,采用4位数字形式表现,和 %V 一起使用 |
%x |
某星期所处年份。其中,星期一是每星期的开始日,采用4位数字形式表现,和 %V 一起使用 |
%Y |
4位数字表示的年份 |
%y |
2位数字表示的年份 |
%% |
符号% 的字面值 |
%x(x为斜体) | 字符x的字面值,x指以上未列出的任何字符 |
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') |
+---------------------------------------------------------+
| Saturday October 1997 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00'
-> '%H %k %I %r %T %S %w');
+---------------------------------------------------------+
| DATE_FORMAT('1997-10-04 22:23:00....... |
+---------------------------------------------------------+
| 22 22 10 10:23:00 PM 22:23:00 00 6 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DATE_SUB(date,INTERVAL expr unit)
类似 DATE_ADD()
函数。
DAY(date)
DAY()
等同于 DAYOFMONTH()
。
DAYNAME(date)
返回 date
参数所对应的星期几。
mysql> SELECT DAYNAME('1998-02-05');
+---------------------------------------------------------+
| DAYNAME('1998-02-05') |
+---------------------------------------------------------+
| Thursday |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DAYOFMONTH(date)
返回 date
参数所对应的一月中的第几天,取值范围从0到31。
mysql> SELECT DAYOFMONTH('1998-02-03');
+---------------------------------------------------------+
| DAYOFMONTH('1998-02-03') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DAYOFWEEK(date)
返回 date
参数所对应的每周中的某一天的索引值(1 = Sunday,2 = Monday……7 = Saturday)。这些索引值对应着 ODBC 标准。
mysql> SELECT DAYOFWEEK('1998-02-03');
+---------------------------------------------------------+
|DAYOFWEEK('1998-02-03') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
DAYOFYEAR(date)
返回 date
参数所对应的一年中的某一天,取值范围从1到366。
mysql> SELECT DAYOFYEAR('1998-02-03');
+---------------------------------------------------------+
| DAYOFYEAR('1998-02-03') |
+---------------------------------------------------------+
| 34 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
EXTRACT(unit FROM date)
EXTRACT()
函数 使用同样的单位标识符 DATE_ADD()
或 DATE_SUB()
,但是只从 date
中提取相应部分,而不执行日期运算。
mysql> SELECT EXTRACT(YEAR FROM '1999-07-02');
+---------------------------------------------------------+
| EXTRACT(YEAR FROM '1999-07-02') |
+---------------------------------------------------------+
| 1999 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03');
+---------------------------------------------------------+
| EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03') |
+---------------------------------------------------------+
| 199907 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
FROM_DAYS(N)
给定某日 N
,返回一个 DATE 值。
mysql> SELECT FROM_DAYS(729669);
+---------------------------------------------------------+
| FROM_DAYS(729669) |
+---------------------------------------------------------+
| 1997-10-07 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
使用 FROM_DAYS()
时,要特别注意古代的日期。该函数不适用于格里高里历(即公历)颁布(公元1582年)之前的日期。
FROM_UNIXTIME(unix_timestamp) FROM_UNIXTIME(unix_timestamp,format)
mysql> SELECT FROM_UNIXTIME(875996580);
+---------------------------------------------------------+
| FROM_UNIXTIME(875996580) |
+---------------------------------------------------------+
| 1997-10-04 22:23:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
HOUR(time)
mysql> SELECT HOUR('10:05:03');
+---------------------------------------------------------+
| HOUR('10:05:03') |
+---------------------------------------------------------+
| 10 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LAST_DAY(date)
mysql> SELECT LAST_DAY('2003-02-05');
+---------------------------------------------------------+
| LAST_DAY('2003-02-05') |
+---------------------------------------------------------+
| 2003-02-28 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
LOCALTIME 和 LOCALTIME()
LOCALTIME
和 LOCALTIME()
与 NOW()
具有相同意义。
LOCALTIMESTAMP 和 LOCALTIMESTAMP()
LOCALTIMESTAMP
和 LOCALTIMESTAMP()
与 NOW()
具有相同意义。
MAKEDATE(year,dayofyear)
基于给定参数年份(year
)和一年中的某一天(dayofyear
),返回一个日期值。dayofyear
必须大于0,否则结果为空。
dayofyear
与DAYOFYEAR()
函数取值类似,取值范围为1-366。
mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32);
+---------------------------------------------------------+
| MAKEDATE(2001,31), MAKEDATE(2001,32) |
+---------------------------------------------------------+
| '2001-01-31', '2001-02-01' |
+---------------------------------------------------------+
1 row in set (0.00 sec)
MAKETIME(hour,minute,second)
基于给定的 hour
、minute
以及 second
这3个参数,计算出一个时间值。
mysql> SELECT MAKETIME(12,15,30);
+---------------------------------------------------------+
| MAKETIME(12,15,30) |
+---------------------------------------------------------+
| '12:15:30' |
+---------------------------------------------------------+
1 row in set (0.00 sec)
MICROSECOND(expr)
基于时间或“日期+时间”的表达式 expr,返回一个以毫秒计的时间值,取值范围为0-99999。
mysql> SELECT MICROSECOND('12:00:00.123456');
+---------------------------------------------------------+
| MICROSECOND('12:00:00.123456') |
+---------------------------------------------------------+
| 123456 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
MINUTE(time)
基于 time
参数,返回分钟数,取值范围为0-59。
mysql> SELECT MINUTE('98-02-03 10:05:03');
+---------------------------------------------------------+
| MINUTE('98-02-03 10:05:03') |
+---------------------------------------------------------+
| 5 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
MONTH(date)
基于 date
参数,返回月份值,取值范围为0-12。
mysql> SELECT MONTH('1998-02-03')
+---------------------------------------------------------+
| MONTH('1998-02-03') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
MONTHNAME(date)
基于 date
参数,返回月份的完整英文名称。
mysql> SELECT MONTHNAME('1998-02-05');
+---------------------------------------------------------+
| MONTHNAME('1998-02-05') |
+---------------------------------------------------------+
| February |
+---------------------------------------------------------+
1 row in set (0.00 sec)
NOW()
返回一定格式的日期+时间值。根据函数是否用于字符串或数字内容,格式为 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS。
mysql> SELECT NOW();
+---------------------------------------------------------+
| NOW() |
+---------------------------------------------------------+
| 1997-12-15 23:50:26 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
PERIOD_ADD(P,N)
将 N 个月添加到时段 P (格式为 YYMM 或 YYYYMM)上,返回值格式为 YYYYMM。注意:时段参数 P 不是一个日期值。
mysql> SELECT PERIOD_ADD(9801,2);
+---------------------------------------------------------+
| PERIOD_ADD(9801,2) |
+---------------------------------------------------------+
| 199803 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
PERIOD_DIFF(P1,P2)
时段 P1
和 P2
之间的月份差值。P1
与 P2
的格式应为 YYMM 或 YYYYMM。注意,时段参数 P1
和 P2
都不是日期值。
mysql> SELECT PERIOD_DIFF(9802,199703);
+---------------------------------------------------------+
| PERIOD_DIFF(9802,199703) |
+---------------------------------------------------------+
| 11 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
QUARTER(date)
返回参数 date
所对应的年中某季度,取值范围为1-4。
mysql> SELECT QUARTER('98-04-01');
+---------------------------------------------------------+
| QUARTER('98-04-01') |
+---------------------------------------------------------+
| 2 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
SECOND(time)
返回参数 time
所对应的秒数,取值范围为0-59。
mysql> SELECT SECOND('10:05:03');
+---------------------------------------------------------+
| SECOND('10:05:03') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
SEC_TO_TIME(seconds)
将参数 seconds
转换成以'HH:MM:SS' 或 HHMMSS 格式(根据函数应用上下文是字符串还是数字)输出的时间值。
mysql> SELECT SEC_TO_TIME(2378);
+---------------------------------------------------------+
| SEC_TO_TIME(2378) |
+---------------------------------------------------------+
| 00:39:38 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
STR_TO_DATE(str,format)
DATE_FORMAT()
函数的逆向函数。包含2个参数,字符串类型参数 str
和格式字符串参数 format
。返回值有2种可能性:如果格式字符串既包含日期又包含时间,则返回一个 DATETIME 值;如果格式字符串只包含日期或时间部分,则函数也相应返回 DATE 或 TIME 类型的值。
mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y');
+---------------------------------------------------------+
| STR_TO_DATE('04/31/2004', '%m/%d/%Y') |
+---------------------------------------------------------+
| 2004-04-31 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
SUBDATE(date,INTERVAL expr unit) 与 SUBDATE(expr,days)
当第二个参数采用 INTERVAL 格式时,SUBDATE()
等同于 DATE_SUB()
。要想详细了解 INTERVAL 单元参数,请参考 DATE_ADD()
。
mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| DATE_SUB('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1997-12-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY);
+---------------------------------------------------------+
| SUBDATE('1998-01-02', INTERVAL 31 DAY) |
+---------------------------------------------------------+
| 1997-12-02 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
SUBTIME(expr1,expr2)
返回值为 expr1 - expr2
,格式与 expr1
相同。expr1
是一个时间或日期时间表达式,而 expr2
是一个时间表达式。
mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999',
-> '1 1:1:1.000002');
+---------------------------------------------------------+
| SUBTIME('1997-12-31 23:59:59.999999'... |
+---------------------------------------------------------+
| 1997-12-30 22:58:58.999997 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
SYSDATE()
根据函数所应用的上下文究竟是字符串还是数字,以 'YYYY-MM-DD HH:MM:SS' 或 YYYYMMDDHHMMSS 格式返回当前日期与时间值。
mysql> SELECT SYSDATE();
+---------------------------------------------------------+
| SYSDATE() |
+---------------------------------------------------------+
| 2006-04-12 13:47:44 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIME(expr)
提取时间或日期时间表达式 expr
的时间部分,将其作为字符串返回。
mysql> SELECT TIME('2003-12-31 01:02:03');
+---------------------------------------------------------+
| TIME('2003-12-31 01:02:03') |
+---------------------------------------------------------+
| 01:02:03 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIMEDIFF(expr1,expr2)
返回表示为时间值的 expr1 - expr2
,expr1
和 expr2
都是时间或日期与时间表达式,但两者必须类型相同。
mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001',
-> '1997-12-30 01:01:01.000002');
+---------------------------------------------------------+
| TIMEDIFF('1997-12-31 23:59:59.000001'..... |
+---------------------------------------------------------+
| 46:58:57.999999 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIMESTAMP(expr), TIMESTAMP(expr1,expr2)
当只接受一个参数 expr
(日期或日期时间类型)时,函数将这个参数以日期时间的形式返回;若接受两个参数,函数则会将时间参数 expr2
添加到日期或日期时间参数 expr1
上,以日期时间形式返回这个组合值。
mysql> SELECT TIMESTAMP('2003-12-31');
+---------------------------------------------------------+
| TIMESTAMP('2003-12-31') |
+---------------------------------------------------------+
| 2003-12-31 00:00:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIMESTAMPADD(unit,interval,datetime_expr)
函数将表示间隔值的整形参数 interval
添加到日期或日期时间参数 datetime_expr
上。interval
所采用的单位由 unit
参数指定。unit
参数的取值范围是:FRAC_SECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER 或 YEAR。
unit
值也可以通过一个前面介绍过的关键字来标识,或者说需要加上前缀 SQL_TSI_
。例如:DAY 和 SQL_TSI_DAY。这两种形式都是合法的。
mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');
+---------------------------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2003-01-02') |
+---------------------------------------------------------+
| 2003-01-02 00:01:00 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
返回两个日期或日期时间类型参数 datetime_expr1
与 datetime_epr2
之间的整数差值。返回值所采用的单位由 unit
参数指定。有关unit
的合法值,可参看 TIMESTAMPADD()
函数介绍。
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
+---------------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01') |
+---------------------------------------------------------+
| 3 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIME_FORMAT(time,format)
该函数和 DATE_FORMAT()
函数用法类似,但 format
字符串中只含有与小时、分钟、秒相关的格式标识符。
如果 time
值包含一个大于23的小时数,%H 与 %k 小时格式标识符就会生成一个超出平时所用范围(0-23)的值。其他与小时相关的格式标识符会生成以12取模的值。
mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l');
+---------------------------------------------------------+
| TIME_FORMAT('100:00:00', '%H %k %h %I %l') |
+---------------------------------------------------------+
| 100 100 04 04 4 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TIME_TO_SEC(time)
将 time
参数转换成秒数返回。
mysql> SELECT TIME_TO_SEC('22:23:00');
+---------------------------------------------------------+
| TIME_TO_SEC('22:23:00') |
+---------------------------------------------------------+
| 80580 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
TO_DAYS(date)
基于日期参数 date
,返回一个天数(自年份0开始的天数)。
mysql> SELECT TO_DAYS(950501);
+---------------------------------------------------------+
| TO_DAYS(950501) |
+---------------------------------------------------------+
| 728779 |
+---------------------------------------------------------+
1 row in set (0.00 sec)