大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> MySQL -> mysql的日期和时间函数

mysql的日期和时间函数

时间: 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

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.