时间: 2021-08-13 作者:daque
mysql的日期和时间函数 这边是一个运用日子因变量的例子。底下的查问采用一切 date_col 值在结果 30 天内的记载。 mysql> select something from tbl_name where to_days(now()) - to_days(date_col) <= 30; dayofweek(date) 归来 date 的礼拜索引(1 = sunday, 2 = monday, ... 7 = saturday)。索引值适合 odbc 的规范。 mysql> select dayofweek(’1998-02-03’); -> 3 weekday(date) 归来 date 的礼拜索引(0 = monday, 1 = tuesday, ... 6 = sunday): mysql> select weekday(’1998-02-03 22:23:00’); -> 1 mysql> select weekday(’1997-11-05’); -> 2 dayofmonth(date) 归来 date 是一月中的第几天,范畴为 1 到 31: mysql> select dayofmonth(’1998-02-03’); -> 3 dayofyear(date) 归来 date 是一年中的第几天,范畴为 1 到 366: mysql> select dayofyear(’1998-02-03’); -> 34 month(date) 归来 date 中的月份,范畴为 1 到 12: mysql> select month(’1998-02-03’); -> 2 dayname(date) 归来 date 的礼拜名: mysql> select dayname("1998-02-05"); -> ’thursday’ monthname(date) 归来 date 的月份名: mysql> select monthname("1998-02-05"); -> ’february’ quarter(date) 归来 date 在一年中的季度,范畴为 1 到 4: mysql> select quarter(’98-04-01’); -> 2 week(date) week(date,first) 对于礼拜日是一周中的第一天的场所,即使因变量惟有一个参数挪用,归来 date 为一年的第几周,归来值范畴为 0 到 53 (是的,大概有第 53 周的发端)。两个参数情势的 week() 承诺你指定一周能否以礼拜日或礼拜一发端,以及归来值为 0-53 仍旧 1-52。 这边的一个表表露第二个参数是怎样处事的: 值 含意 0 一周以礼拜日发端,归来值范畴为 0-53 1 一周以礼拜一发端,归来值范畴为 0-53 2 一周以礼拜日发端,归来值范畴为 1-53 3 一周以礼拜一发端,归来值范畴为 1-53 (iso 8601) mysql> select week(’1998-02-20’); -> 7 mysql> select week(’1998-02-20’,0); -> 7 mysql> select week(’1998-02-20’,1); -> 8 mysql> select week(’1998-12-31’,1); -> 53 提防,在本子 4.0 中,week(#,0) 被变动为配合 usa 历法。 提防,即使一周是上一年的结果一周,当你没有运用 2 或 3 做为可选参数时,mysql 将归来 0: mysql> select year(’2000-01-01’), week(’2000-01-01’,0); -> 2000, 0 mysql> select week(’2000-01-01’,2); -> 52 你大概会辩论说,当给定的日子值本质上是 1999 年的第 52 周的一局部时,mysql 对 week() 因变量该当归来 52。咱们确定归来 0 ,是由于咱们蓄意该因变量归来“在指定年份中是第几周”。当与其它的索取日子值中的月日值的因变量贯串运用时,这使得 week() 因变量的用法真实。 即使你更蓄意能获得适合的年-周值,那么你该当运用参数 2 或 3 做为可选参数,大概运用因变量 yearweek() : mysql> select yearweek(’2000-01-01’); -> 199952 mysql> select mid(yearweek(’2000-01-01’),5,2); -> 52 year(date) 归来 date 的年份,范畴为 1000 到 9999: mysql> select year(’98-02-03’); -> 1998 yearweek(date) yearweek(date,first) 归来一个日子值是的哪一年的哪一周。第二个参数的情势与效率实足与 week() 的第二个参数普遍。提防,对于给定的日子参数是一年的第一周或结果一周的,归来的年份值大概与日子参数给出的年份不普遍: mysql> select yearweek(’1987-01-01’); -> 198653 提防,对于可选参数 0 或 1,周值的归来值各别于 week() 因变量所归来值(0), week() 按照给定的年语境归来周值。 hour(time) 归来 time 的小时价,范畴为 0 到 23: mysql> select hour(’10:05:03’); -> 10 minute(time) 归来 time 的秒钟值,范畴为 0 到 59: mysql> select minute(’98-02-03 10:05:03’); -> 5 second(time) 归来 time 的秒值,范畴为 0 到 59: mysql> select second(’10:05:03’); -> 3 period_add(p,n) 减少 n 个月到功夫 p(方法为 yymm 或 yyyymm)中。以 yyyymm 方法归来值。 提防,功夫参数 p 不是 一个日子值: mysql> select period_add(9801,2); -> 199803 period_diff(p1,p2) 归来功夫 p1 和 p2 之间的月数。p1 和 p2 该当以 yymm 或 yyyymm 指定。 提防,功夫参数 p1 和 p2 不是 日子值: mysql> select period_diff(9802,199703); -> 11 date_add(date,interval expr type) date_sub(date,interval expr type) adddate(date,interval expr type) subdate(date,interval expr type) 那些因变量实行日子的算术演算。adddate() 和 subdate() 辨别是 date_add() 和 date_sub() 的同义词。 在 mysql 3.23 中,即使表白式的右边是一个日子值或一个日子功夫型字段,你不妨运用 + 和 - 包办 date_add() 和 date_sub()(示比方下)。 参数 date 是一个 datetime 或 date 值,指定一个日子的发端。expr 是一个表白式,指定从发端日子上减少仍旧减去间隙值。expr 是一个字符串;它不妨以一个 “-” 领头表白一个负的间隙值。type 是一个要害词,它标记着表白式以何方法被证明。 下表表露 type 和 expr 参数是怎样关系的: [page_break]type 值 expr 憧憬的方法 second seconds minute minutes hour hours day days month months year years minute_second "minutes:seconds" hour_minute "hours:minutes" day_hour "days hours" year_month "years-months" hour_second "hours:minutes:seconds" day_minute "days hours:minutes" day_second "days hours:minutes:seconds"
在 expr 的方法中,mysql 承诺任何字符动作定界符。表中所表露的是倡导的定界字符。即使 date 参数是一个 date 值,而且计划的间隙只是有 year、month 和 day 局部(没有功夫局部),那么归来值也是一个 date 值。要不归来值是一个 datetime 值: mysql> select "1997-12-31 23:59:59" + interval 1 second; -> 1998-01-01 00:00:00mysql> select interval 1 day + "1997-12-31"; -> 1998-01-01mysql> select "1998-01-01" - interval 1 second; -> 1997-12-31 23:59:59mysql> select date_add("1997-12-31 23:59:59", -> interval 1 second); -> 1998-01-01 00:00:00mysql> select date_add("1997-12-31 23:59:59", -> interval 1 day); -> 1998-01-01 23:59:59mysql> select date_add("1997-12-31 23:59:59", -> interval "1:1" minute_second); -> 1998-01-01 00:01:00mysql> select date_sub("1998-01-01 00:00:00", -> interval "1 1:1:1" day_second); -> 1997-12-30 22:58:59mysql> select date_add("1998-01-01 00:00:00", -> interval "-1 10" day_hour); -> 1997-12-30 14:00:00mysql> select date_sub("1998-01-02", interval 31 day); -> 1997-12-02
即使你指定了一个太短的间隙值(没有囊括 type 要害词所憧憬的一切间隙局部),mysql 假如你脱漏了间隙值的最左边局部。比方,即使指定一个 type 为 day_second,那么 expr 值被憧憬包括天、钟点、秒钟和秒局部。即使你象 "1:10" 样指定一个值,mysql 假如天和钟点局部被脱漏了,指定的值代办秒钟和秒。换句话说,"1:10" day_second 被证明为等价于 "1:10" minute_second。这一致于 mysql 证明 time 值为过程的功夫而不是一天的功夫。 提防,即使依着包括一个功夫局部的间隙减少或缩小一个日子值,该日子值将被机动地变换到一个日子功夫值: mysql> select date_add("1999-01-01", interval 1 day); -> 1999-01-02mysql> select date_add("1999-01-01", interval 1 hour); -> 1999-01-01 01:00:00
即使你运用了决定不精确的日子,归来截止将是 null。即使你减少 month、year_month 或 year,而且截止日子的天比月牙份的最大天数还大,那么它将被安排到月牙份的最大天数: mysql> select date_add('1998-01-30', interval 1 month); -> 1998-02-28
提防,上头的例子中,单词 interval 和要害词 type 是不辨别假名巨细写的。
extract(type from date) extract() 因变量运用与 date_add() 或 date_sub() 普遍的间隙典型,然而它用来指定从日子中索取的局部,而不是举行日子算术演算。 mysql> select extract(year from "1999-07-02"); -> 1999mysql> select extract(year_month from "1999-07-02 01:02:03"); -> 199907mysql> select extract(day_minute from "1999-07-02 01:02:03"); -> 20102
to_days(date) 给出一个日子 date,归来一个天数(从 0 年发端的天数): mysql> select to_days(950501); -> 728779mysql> select to_days('1997-10-07'); -> 729669
to_days() 偶尔于运用先于格里高里历法(即现行反革命的太阳历)(1582)展示的值,由于它不商量当历法变换时所丢失的天数。
from_days(n) 给出一个天数 n,归来一个 date 值: mysql> select from_days(729669); -> '1997-10-07'
from_days() 偶尔于运用先于格里高里历法(1582)展示的值,由于它不商量当历法变换时所丢失的天数。
date_format(date,format) 按照 format 字符串方法化 date 值。底下的化装符可被用来 format 字符串中:
化装符 含意 %m 月的名字 (january..december) %w 礼拜的名字 (sunday..saturday) %d 有英文后缀的半月的第几天 (0th, 1st, 2nd, 3rd, etc.) %y 年份,数字的,4 位 %y 年份,数字的,2 位 %x 周值的年份,礼拜日是一个礼拜的第一天,数字的,4 位,与 '%v' 一齐运用 %x 周值的年份,礼拜一是一个礼拜的第一天,数字的,4 位,与 '%v' 一齐运用 %a 缩写的礼拜名 (sun..sat) %d 月份中的天数,数字的 (00..31) %e 月份中的天数,数字的 (0..31) %m 月,数字的 (00..12) %c 月,数字的 (0..12) %b 缩写的月份名 (jan..dec) %j 一年中的天数 (001..366) %h 钟点 (00..23) %k 钟点 (0..23) %h 钟点 (01..12) %i 钟点 (01..12) %l 钟点 (1..12) %i 秒钟,数字的 (00..59) %r 功夫,12 钟点 (hh:mm:ss [ap]m) %t 功夫,24 钟点 (hh:mm:ss) %s 秒 (00..59) %s 秒 (00..59) %p am 或 pm %w 一周中的天数 (0=sunday..6=saturday) %u 礼拜 (00..53),礼拜日是一个礼拜的第一天 %u 礼拜 (00..53),礼拜一是一个礼拜的第一天 %v 礼拜 (01..53),礼拜日是一个礼拜的第一天。与 '%x' 一道运用 %v 礼拜 (01..53),礼拜一是一个礼拜的第一天。与 '%x' 一道运用 %% 一个假名 “%”
一切其它的字符不过程证明,径直复制到截止中: mysql> select date_format('1997-10-04 22:23:00', '%w %m %y'); -> 'saturday october 1997'mysql> select date_format('1997-10-04 22:23:00', '%h:%i:%s'); -> '22:23:00'mysql> select date_format('1997-10-04 22:23:00', '%d %y %a %d %m %b %j'); -> '4th 97 sat 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 3.23 中,在方法化装符前须要字符 `%'。在更早的 mysql 本子中,`%' 是可选的。 月份与天化装符的范畴从零发端的因为是,在 mysql 3.23 中,它承诺保存不完备的日子值(比方 '2004-00-00')。
time_format(time,format) 它的运用本领与上头的 date_format() 因变量一致,然而 format 字符串只包括处置钟点、分和秒的那些方法化装符。运用其它的化装符会爆发一个 null 值或 0。
curdate() current_date 以 'yyyy-mm-dd' 或 yyyymmdd 方法归来暂时的日子值,归来的方法在于于该因变量是用来字符串仍旧数字语境中: mysql> select curdate(); -> '1997-12-15'mysql> select curdate() + 0; -> 19971215
curtime() current_time 以 'hh:mm:ss' 或 hhmmss 方法归来暂时的功夫值,归来的方法在于于该因变量是用来字符串仍旧数字语境中: mysql> select curtime(); -> '23:50:26'mysql> select curtime() + 0; -> 235026
now() sysdate() current_timestamp 以 'yyyy-mm-dd hh:mm:ss' 或 yyyymmddhhmmss 方法归来暂时的日子功夫值,归来的方法在于于该因变量是用来字符串仍旧数字语境中: mysql> select now(); -> '1997-12-15 23:50:26'mysql> select now() + 0; -> 19971215235026
提防,因变量 now() 在每个查问中只计划一次,也即是在查问发端实行时。这即是说,即使在一个独立的查问中屡次援用了 now(),它只会给出值都是一个沟通的功夫。
unix_timestamp() unix_timestamp(date) 即使挪用时没有参数,以无标记的平头情势归来一个 unix 功夫戳(从 '1970-01-01 00:00:00' gmt 发端的秒数)。即使以一个参数 date 挪用 unix_timestamp(),它将归来该参数值从 '1970-01-01 00:00:00' gmt 发端过程的秒数值。date 不妨是一个 date 字符串,一个 datetime 字符串,一个 timestamp,大概以一个 yymmdd 或 yyyymmdd 表露的当地功夫: mysql> select unix_timestamp(); -> 882226357mysql> select unix_timestamp('1997-10-04 22:23:00'); -> 875996580
当 unix_timestamp 被用来一个 timestamp 列时,因变量径直归来一个里面的功夫戳值,而不举行一个隐含地 “string-to-unix-timestamp” 变换。即使你传播一个胜过范畴的日子参数给 unix_timestamp() ,它将归来 0,然而请提防,mysql 对其只是举行基础的检查(年范畴 1970-2037,月份 01-12,日子 01-31)。 即使你蓄意减去 unix_timestamp() 列,你该当须要将截止强迫变换为一有标记平头。察看章节 6.3.5 cast 因变量。
from_unixtime(unix_timestamp [,format]) 以 'yyyy-mm-dd hh:mm:ss' 或 yyyymmddhhmmss 方法归来一个 unix_timestamp 参数值,归来值的情势在于于该因变量运用于字符串仍旧数字语境。 即使 format 给出,归来值依 format 字符串被方法。format 不妨包括与 date_format() 因变量同样的化装符。 mysql> select from_unixtime(875996580); -> '1997-10-04 22:23:00'mysql> select from_unixtime(875996580) + 0; -> 19971004222300mysql> select from_unixtime(unix_timestamp(), '%y %d %m %h:%i:%s %x'); -> '1997 23rd december 03:43:30 1997'
sec_to_time(seconds) 以 'hh:mm:ss' 或 hhmmss 方法归来参数 seconds 被变换到时间秒后的值,归来值的情势在于于该因变量运用于字符串仍旧数字语境: 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'); -> 80580mysql> select time_to_sec('00:39:38'); -> 2378