SQL – 日期函数
SQL – 日期函数
下表列出了可通过 SQL 使用的所有重要的日期和时间相关函数。您的 RDBMS 还支持各种其他功能。给定的列表基于 MySQL RDBMS。
Sr.No. | 功能说明 |
---|---|
1 | ADDDATE()
添加日期 |
2 |
ADDTIME()
添加时间 |
3 | CONVERT_TZ()
从一个时区转换为另一个时区 |
4 | CURDATE()
返回当前日期 |
5 | CURRENT_DATE(), CURRENT_DATE
CURDATE() 的同义词 |
6 | CURRENT_TIME(), CURRENT_TIME
CURTIME() 的同义词 |
7 | CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP
NOW() 的同义词 |
8 | CURTIME()
返回当前时间 |
9 | DATE_ADD()
添加两个日期 |
10 | DATE_FORMAT()
按指定格式日期 |
11 | DATE_SUB()
减去两个日期 |
12 | DATE()
提取日期或日期时间表达式的日期部分 |
13 | DATEDIFF()
减去两个日期 |
14 | DAY()
DAYOFMONTH() 的同义词 |
15 | DAYNAME()
返回工作日的名称 |
16 | DAYOFMONTH()
返回月份中的第几天 (1-31) |
17 | DAYOFWEEK()
返回参数的工作日索引 |
18 | DAYOFYEAR()
返回一年中的第几天 (1-366) |
19 | EXTRACT
提取日期的一部分 |
20 | FROM_DAYS()
将天数转换为日期 |
21 | FROM_UNIXTIME()
将日期格式化为 UNIX 时间戳 |
22 | HOUR()
提取小时 |
23 | LAST_DAY
返回参数的月份的最后一天 |
24 | LOCALTIME(), LOCALTIME
NOW() 的同义词 |
25 | LOCALTIMESTAMP, LOCALTIMESTAMP()
NOW() 的同义词 |
26 | MAKEDATE()
从年份和年份中的某一天创建一个日期 |
27 | MAKETIME
找时间() |
28 | MICROSECOND()
从参数返回微秒 |
29 | MINUTE()
从参数返回分钟 |
30 | MONTH()
返回从过去的日期开始的月份 |
31 | MONTHNAME()
返回月份的名称 |
32 | NOW()
返回当前日期和时间 |
33 | PERIOD_ADD()
将期间添加到年月 |
34 | PERIOD_DIFF()
返回期间之间的月数 |
35 | QUARTER()
从日期参数返回季度 |
36 | SEC_TO_TIME()
将秒转换为“HH:MM:SS”格式 |
37 | SECOND()
返回第二个 (0-59) |
38 | STR_TO_DATE()
将字符串转换为日期 |
39 | SUBDATE()
当使用三个参数调用时,DATE_SUB() 的同义词 |
40 | SUBTIME()
减去时间 |
41 | SYSDATE()
返回函数执行的时间 |
42 | TIME_FORMAT()
格式为时间 |
43 | TIME_TO_SEC()
返回转换为秒的参数 |
44 | TIME()
提取传递的表达式的时间部分 |
45 | TIMEDIFF()
减去时间 |
46 | TIMESTAMP()
此函数使用单个参数返回日期或日期时间表达式。有两个参数,参数的总和 |
47 | TIMESTAMPADD()
向日期时间表达式添加一个间隔 |
48 | TIMESTAMPDIFF()
从日期时间表达式中减去一个间隔 |
49 | TO_DAYS()
返回转换为天的日期参数 |
50 | UNIX_TIMESTAMP()
返回 UNIX 时间戳 |
51 | UTC_DATE()
返回当前 UTC 日期 |
52 | UTC_TIME()
返回当前 UTC 时间 |
53 | UTC_TIMESTAMP()
返回当前 UTC 日期和时间 |
54 | WEEK()
返回周数 |
55 | WEEKDAY()
返回工作日索引 |
56 | WEEKOFYEAR()
返回日期的日历周 (1-53) |
57 | YEAR()
返回年份 |
58 | YEARWEEK()
返回年和周 |
添加日期(日期,间隔表达式单位),添加日期(表达式,天数)
当使用第二个参数的 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)
当使用第二个参数的 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)
添加时间(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)
这会将日期时间值 dt 从 from_tz 给定的时区转换为 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() 的同义词
时间()
返回当前时间作为 ‘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() 的同义词。
日期(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(日期,INTERVAL expr 单位),DATE_SUB(日期,INTERVAL expr 单位)
这些函数执行日期算术。该日期是一个DATETIME或DATE值,指定开始日期。的EXPR是指定要被添加或从起始日期中减去的时间间隔值的表达式。expr 是一个字符串;对于负间隔,它可能以“-”开头。
甲单元是指示在其中表达应被解释为单位的关键字。
该INTERVAL关键字和指定符是不区分大小写的单元。
下表显示了每个单位值的 expr 参数的预期形式。
unit Value | 预期的 exprFormat |
---|---|
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(日期,格式)
此命令根据格式字符串格式化日期值。
可以在格式字符串中使用以下说明符。‘%’ 字符需要在格式说明符字符之前。
Sr.No. | 说明符和说明 |
---|---|
1 |
%a 缩写的工作日名称(Sun..Sat) |
2 |
%b 缩写的月份名称(Jan..Dec) |
3 |
%c 月份,数字 (0..12) |
4 |
%D 带英文后缀的月份中的第几天(0th、1st、2nd、3rd、.) |
5 |
%d 月份中的第几天,数字 (00..31) |
6 |
%e 月份中的第几天,数字 (0..31) |
7 |
%f 微秒 (000000..999999) |
8 |
%H 小时 (00..23) |
9 |
%h 小时 (01..12) |
10 |
%I 小时 (01..12) |
11 |
%i 分钟,数字 (00..59) |
12 |
%j 一年中的第几天 (001..366) |
13 |
%k 小时 (0..23) |
14 |
%l 小时 (1..12) |
15 |
%M 月份名称(一月..十二月) |
16 |
%m 月份,数字 (00..12) |
17 |
%p 上午或下午 |
18 |
%r 时间,12 小时制(hh:mm:ss 后跟 AM 或 PM) |
19 |
%S 秒 (00..59) |
20 |
%s 秒 (00..59) |
21 |
%T 时间,24 小时制(时:分:秒) |
22 |
%U 周 (00..53),其中星期日是一周的第一天 |
23 |
%u 周 (00..53),其中星期一是一周的第一天 |
24 |
%V 周 (01..53),其中星期日是一周的第一天;与 %X 一起使用 |
25 |
%v 周 (01..53),其中星期一是一周的第一天;与 %x 一起使用 |
26 |
%W 工作日名称(星期日..星期六) |
27 |
%w 星期几(0=星期日..6=星期六) |
28 |
%X 周的年份,其中星期日是一周的第一天,数字,四位数字;与 %V 一起使用 |
29 |
%x 一周的年份,其中星期一是一周的第一天,数字,四位数字;与 %v 一起使用 |
30 |
%Y 年份,数字,四位数字 |
31 |
%y 年份,数字(两位数) |
32 |
%% 文字 .%。特点 |
33 |
%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(日期,INTERVAL expr 单位)
这类似于 DATE_ADD() 函数。
DAY(日期)
DAY() 是 DAYOFMONTH() 函数的同义词。
DAYNAME(日期)
返回日期的工作日名称。
mysql> SELECT DAYNAME('1998-02-05'); +---------------------------------------------------------+ | DAYNAME('1998-02-05') | +---------------------------------------------------------+ | Thursday | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DAYOFMONTH(日期)
返回日期的月份中的第几天,范围为 0 到 31。
mysql> SELECT DAYOFMONTH('1998-02-03'); +---------------------------------------------------------+ | DAYOFMONTH('1998-02-03') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DAYOFWEEK(日期)
返回日期的工作日索引(1 = 星期日,2 = 星期一,.,7 = 星期六)。这些索引值对应于 ODBC 标准。
mysql> SELECT DAYOFWEEK('1998-02-03'); +---------------------------------------------------------+ |DAYOFWEEK('1998-02-03') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
DAYOFYEAR(日期)
为日期返回一年中的第几天,范围为 1 到 366。
mysql> SELECT DAYOFYEAR('1998-02-03'); +---------------------------------------------------------+ | DAYOFYEAR('1998-02-03') | +---------------------------------------------------------+ | 34 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
提取(单位从日期)
EXTRACT() 函数使用与 DATE_ADD() 或 DATE_SUB() 相同类型的单位说明符,但从日期中提取部分而不是执行日期算术。
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,格式)
以 ‘YYYY-MM-DD HH:MM:SS 或 YYYYMMDDHHMMSS 格式的值返回unix_timestamp参数的表示形式,具体取决于函数是在字符串中还是在数字上下文中使用。该值以当前时区表示。unix_timestamp 参数是一个内部时间戳值,由UNIX_TIMESTAMP()函数生成。
如果给出了格式,则结果将根据格式字符串进行格式化,其使用方式与DATE_FORMAT()函数的条目中列出的方式相同。
mysql> SELECT FROM_UNIXTIME(875996580); +---------------------------------------------------------+ | FROM_UNIXTIME(875996580) | +---------------------------------------------------------+ | 1997-10-04 22:23:00 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
小时(时间)
返回时间的小时。对于时间值,返回值的范围是 0 到 23。但是,TIME 值的范围实际上要大得多,因此 HOUR 可以返回大于 23 的值。
mysql> SELECT HOUR('10:05:03'); +---------------------------------------------------------+ | HOUR('10:05:03') | +---------------------------------------------------------+ | 10 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
LAST_DAY(日期)
获取日期或日期时间值并返回该月最后一天的相应值。如果参数无效,则返回 NULL。
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(年,年日)
返回日期,给定年份和年份值。dayofyear 值必须大于 0,否则结果将为 NULL。
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(小时,分钟,秒)
返回根据小时、分钟和秒参数计算的时间值。
mysql> SELECT MAKETIME(12,15,30); +---------------------------------------------------------+ | MAKETIME(12,15,30) | +---------------------------------------------------------+ | '12:15:30' | +---------------------------------------------------------+ 1 row in set (0.00 sec)
微秒(expr)
将时间或日期时间表达式 (expr) 中的微秒作为 0 到 999999 范围内的数字返回。
mysql> SELECT MICROSECOND('12:00:00.123456'); +---------------------------------------------------------+ | MICROSECOND('12:00:00.123456') | +---------------------------------------------------------+ | 123456 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
分钟(时间)
返回时间的分钟,范围为 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(日期)
返回日期的月份,范围为 0 到 12。
mysql> SELECT MONTH('1998-02-03') +---------------------------------------------------------+ | MONTH('1998-02-03') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
MONTHNAME(日期)
返回日期的月份全名。
mysql> SELECT MONTHNAME('1998-02-05'); +---------------------------------------------------------+ | MONTHNAME('1998-02-05') | +---------------------------------------------------------+ | February | +---------------------------------------------------------+ 1 row in set (0.00 sec)
现在()
返回当前日期和时间作为 ‘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)
季度(日期)
返回日期的一年中的季度,范围为 1 到 4。
mysql> SELECT QUARTER('98-04-01'); +---------------------------------------------------------+ | QUARTER('98-04-01') | +---------------------------------------------------------+ | 2 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
第二次)
返回时间的秒数,范围为 0 到 59。
mysql> SELECT SECOND('10:05:03'); +---------------------------------------------------------+ | SECOND('10:05:03') | +---------------------------------------------------------+ | 3 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
SEC_TO_TIME(秒)
返回秒参数,转换为小时、分钟和秒,作为 ‘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(字符串,格式)
这是 DATE_FORMAT() 函数的反函数。它需要一个字符串 str 和一个格式字符串格式。如果格式字符串同时包含日期和时间部分,则 STR_TO_DATE() 函数将返回 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) and 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)
子时间(expr1,expr2)
SUBTIME() 函数返回 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)
系统日期()
返回当前日期和时间作为 ‘YYYY-MM-DD HH:MM:SS’ 或 YYYYMMDDHHMMSS 格式的值,具体取决于函数是在字符串中还是在数字上下文中使用。
mysql> SELECT SYSDATE(); +---------------------------------------------------------+ | SYSDATE() | +---------------------------------------------------------+ | 2006-04-12 13:47:44 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
时间(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)
TIMEDIFF() 函数返回 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)
时间戳(expr), 时间戳(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(单位,间隔,datetime_expr)
此函数将整数表达式间隔添加到日期或日期时间表达式datetime_expr。间隔的单位由 unit 参数给出,它应该是以下值之一 –
- FRAC_SECOND
- 第二,分钟
- 小时,天
- 星期
- 月
- 季度或
- 年
可以使用所示的关键字之一或带有 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_expr2 之间的整数差。结果的单位由 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(时间,格式)
此函数的使用方式与 DATE_FORMAT() 函数类似,但格式字符串可能仅包含小时、分钟和秒的格式说明符。
如果时间值包含大于 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(时间)
返回转换为秒的时间参数。
mysql> SELECT TIME_TO_SEC('22:23:00'); +---------------------------------------------------------+ | TIME_TO_SEC('22:23:00') | +---------------------------------------------------------+ | 80580 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
今天的日期)
给定一个日期,返回一个天数(自 0 年以来的天数)。
mysql> SELECT TO_DAYS(950501); +---------------------------------------------------------+ | TO_DAYS(950501) | +---------------------------------------------------------+ | 728779 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
UNIX_TIMESTAMP(), UNIX_TIMESTAMP(日期)
如果不带参数调用,此函数返回一个 Unix 时间戳(自 ‘1970-01-01 00:00:00’ UTC 以来的秒数)作为无符号整数。如果使用日期参数调用 UNIX_TIMESTAMP(),它会返回参数值作为自 ‘1970-01-01 00:00:00’ UTC 以来的秒数。date 可以是 DATE 字符串、DATETIME 字符串、TIMESTAMP 或格式为 YYMMDD 或 YYYYMMDD 的数字。
mysql> SELECT UNIX_TIMESTAMP(); +---------------------------------------------------------+ | UNIX_TIMESTAMP() | +---------------------------------------------------------+ | 882226357 | +---------------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); +---------------------------------------------------------+ | UNIX_TIMESTAMP('1997-10-04 22:23:00') | +---------------------------------------------------------+ | 875996580 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
UTC_DATE, UTC_DATE()
返回当前 UTC 日期作为 ‘YYYY-MM-DD’ 或 YYYYMMDD 格式的值,具体取决于函数是在字符串还是数字上下文中使用。
mysql> SELECT UTC_DATE(), UTC_DATE() + 0; +---------------------------------------------------------+ | UTC_DATE(), UTC_DATE() + 0 | +---------------------------------------------------------+ | 2003-08-14, 20030814 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
UTC_TIME, UTC_TIME()
返回当前 UTC 时间作为 ‘HH:MM:SS’ 或 HHMMSS 格式的值,具体取决于函数是在字符串还是数字上下文中使用。
mysql> SELECT UTC_TIME(), UTC_TIME() + 0; +---------------------------------------------------------+ | UTC_TIME(), UTC_TIME() + 0 | +---------------------------------------------------------+ | 18:07:53, 180753 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
UTC_TIMESTAMP, UTC_TIMESTAMP()
以“YYYY-MM-DD HH:MM:SS”或YYYYMMDDHHMMSS 格式的值返回当前UTC 日期和时间,具体取决于函数是在字符串中还是在数字上下文中使用。
mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0; +---------------------------------------------------------+ | UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0 | +---------------------------------------------------------+ | 2003-08-14 18:08:04, 20030814180804 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
周(日期[,模式])
此函数返回日期的周数。WEEK() 的两个参数形式允许您指定一周是从星期日还是星期一开始,以及返回值应该在 0 到 53 或 1 到 53 的范围内。如果省略了 mode 参数,使用 default_week_format 系统变量的值
Mode | 一周的第一天 | 范围 | 第 1 周是第一周。 |
---|---|---|---|
0 | 星期日 | 0-53 | 今年有一个星期天 |
1 | 周一 | 0-53 | 今年有超过 3 天 |
2 | 星期日 | 1-53 | 今年有一个星期天 |
3 | 周一 | 1-53 | 今年有超过 3 天 |
4 | 星期日 | 0-53 | 今年有超过 3 天 |
5 | 周一 | 0-53 | 今年有一个星期一 |
6 | 星期日 | 1-53 | 今年有超过 3 天 |
7 | 周一 | 1-53 | 今年有一个星期一 |
mysql> SELECT WEEK('1998-02-20'); +---------------------------------------------------------+ | WEEK('1998-02-20') | +---------------------------------------------------------+ | 7 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
工作日(日期)
返回日期的工作日索引(0 = 星期一,1 = 星期二,. 6 = 星期日)。
mysql> SELECT WEEKDAY('1998-02-03 22:23:00'); +---------------------------------------------------------+ | WEEKDAY('1998-02-03 22:23:00') | +---------------------------------------------------------+ | 1 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
WEEKOFYEAR(日期)
将日期的日历周作为 1 到 53 范围内的数字返回。WEEKOFYEAR() 是与 WEEK(date,3) 等效的兼容函数。
mysql> SELECT WEEKOFYEAR('1998-02-20'); +---------------------------------------------------------+ | WEEKOFYEAR('1998-02-20') | +---------------------------------------------------------+ | 8 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
年(日期)
返回日期的年份,范围为 1000 到 9999,或 0 为 .zero。日期。
mysql> SELECT YEAR('98-02-03'); +---------------------------------------------------------+ | YEAR('98-02-03') | +---------------------------------------------------------+ | 1998 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
YEARWEEK(日期),YEARWEEK(日期,模式)
返回日期的年和周。mode 参数的工作方式与 WEEK() 函数的 mode 参数完全一样。结果中的年份可能与年份的第一周和最后一周的日期参数中的年份不同。
mysql> SELECT YEARWEEK('1987-01-01'); +---------------------------------------------------------+ | YEAR('98-02-03')YEARWEEK('1987-01-01') | +---------------------------------------------------------+ | 198653 | +---------------------------------------------------------+ 1 row in set (0.00 sec)
注意– 周数与 WEEK() 函数为可选参数 0 或 1 返回 (0) 的数不同,因为 WEEK() 然后返回给定年份上下文中的周数。