10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 41.1 mb
PDF (A4)- 41.2 mb
PDF (RPM)- 39.8 mb
HTML下载(TGZ)- 9.5 mb
HTML下载(Zip)- 9.6 mb
HTML下载(RPM)- 8.1 mb
手册(TGZ)- 260.6 kb
手册(Zip)- 371.7 kb
信息(Gzip)- 3.9 mb
信息(邮政编码)- 3.9 mb
本手册节选

12.7日期和时间函数

本节描述可用于操作时态值的函数。看到第11.2节“日期和时间数据类型”,以说明每个日期和时间类型的值范围,以及指定值时可采用的有效格式。

表12.11日期和时间函数

的名字 描述
ADDDATE () 将时间值(间隔)添加到日期值
ADDTIME () 添加时间
CONVERT_TZ () 从一个时区转换到另一个时区
CURDATE () 返回当前日期
当前日期()当前日期 CURDATE()的同义词
当前时间()当前时间 CURTIME()的同义词
CURRENT_TIMESTAMP ()CURRENT_TIMESTAMP NOW的同义词()
CURTIME () 返回当前时间
日期() 提取date或datetime表达式的date部分
DATE_ADD () 将时间值(间隔)添加到日期值
DATE_FORMAT () 格式化指定的日期
DATE_SUB () 从日期中减去时间值(间隔)
DATEDIFF () 减去两个日期
天() DAYOFMONTH()的同义词
DAYNAME () 返回工作日的名称
DAYOFMONTH () 返回该月的日期(0-31)
DAYOFWEEK () 返回参数的工作日索引
DAYOFYEAR () 返回一年中的某一天(1-366)
提取() 摘录部分约会内容
FROM_DAYS () 将日期转换为日期
FROM_UNIXTIME () 将Unix时间戳格式化为日期
GET_FORMAT () 返回一个日期格式字符串
小时() 提取时间
LAST_DAY 返回这个月的最后一天
作用是()本地时间 NOW()的同义词
LOCALTIMESTAMPLOCALTIMESTAMP () NOW()的同义词
MAKEDATE () 根据年份和日期创建一个日期
挤出时间() 以小时、分、秒为单位创造时间
微秒() 返回参数中的微秒数
分钟() 返回参数的分钟
月() 从所经过的日期开始返回月份
MONTHNAME () 返回月份的名称
现在() 返回当前日期和时间
PERIOD_ADD () 在年-月的基础上加上一个周期
PERIOD_DIFF () 返回周期之间的月数
季度() 从date参数返回quarter
SEC_TO_TIME () 将秒转换为'hh:mm:ss'格式
第二个() 返回第二个(0-59)
STR_TO_DATE () 将字符串转换为日期
SUBDATE () 当使用三个参数调用时,这是DATE_SUB()的同义词
SUBTIME () 减倍
SYSDATE () 返回函数执行的时间
时间() 提取传递的表达式的时间部分
TIME_FORMAT () 格式化为时间
TIME_TO_SEC () 返回转换为秒的参数
TIMEDIFF () 减去时间
时间戳() 如果只有一个参数,此函数将返回date或datetime表达式;有两个参数,参数的和
TIMESTAMPADD () 向datetime表达式添加一个间隔
TIMESTAMPDIFF () 从datetime表达式中减去一个间隔
TO_DAYS () 返回转换为天数的date参数
TO_SECONDS () 返回date或datetime参数转换为从Year 0开始的秒数
UNIX_TIMESTAMP () 返回Unix时间戳
UTC_DATE () 返回当前UTC日期
UTC_TIME () 返回当前UTC时间
UTC_TIMESTAMP () 返回当前UTC日期和时间
周() 返回周号
工作日() 返回工作日索引
WEEKOFYEAR () 返回日期的日历周(1-53)
年() 回归一年
YEARWEEK () 返回年份和星期

下面是一个使用日期函数的例子。下面的查询选择具有date_col过去30天内的价值:

mysql >选择某物tbl_name-> where date_sub (curdate (), interval 30天)<=date_col

查询还会选择日期在将来的行。

期望日期值的函数通常接受datetime值,而忽略时间部分。期望得到时间值的函数通常接受datetime值,而忽略date部分。

每个返回当前日期或时间的函数在查询执行开始时只计算一次。这意味着对一个函数的多次引用,例如现在()在单个查询中总是产生相同的结果。(就我们的目的而言,单个查询还包括对存储程序(存储例程、触发器或事件)和该程序调用的所有子程序的调用。)这个原则也适用于CURDATE ()CURTIME ()UTC_DATE ()UTC_TIME ()UTC_TIMESTAMP (),以及他们的任何同义词。

CURRENT_TIMESTAMP ()当前时间()当前日期(),FROM_UNIXTIME ()函数返回当前会话时区中的值,该值可作为time_zone系统变量。此外,UNIX_TIMESTAMP ()假设它的参数是会话时区中的datetime值。看到“MySQL服务器时区支持”章节5.1.15

可以使用一些日期函数日期或不完整的日期,例如“2001-11-00”,而其他人则不能。提取日期部分的函数通常处理不完整的日期,因此可能在您期望得到非零值时返回0。例如:

mysql> SELECT DAYOFMONTH('2001-11-00'), MONTH(' 2005-06-00 ');-> 0,0

其他函数期望完成日期和返回对于不完整的日期。这些函数包括执行日期算术或将日期的部分映射到名称的函数。例如:

mysql> SELECT DATE_ADD('2006-05-00',间隔1天);—> NULL mysql> SELECT DAYNAME('2006-05-00');- >零

传递时,有几个函数是严格的日期()函数value作为参数并拒绝day部分为零的不完整日期:CONVERT_TZ ()DATE_ADD ()DATE_SUB ()DAYOFYEAR ()TIMESTAMPDIFF ()TO_DAYS ()TO_SECONDS ()周()工作日()WEEKOFYEAR ()YEARWEEK ()

小数秒时间DATETIME,时间戳支持值,精度可达微秒。接受临时实参的函数接受的值为小数秒。时间函数的返回值适当地包括小数秒。

  • ADDDATE (日期,间隔expr单位ADDDATE (expr

    的方法调用时时间间隔第二个论证的形式,ADDDATE ()是的同义词吗DATE_ADD ().相关功能SUBDATE ()是的同义词吗DATE_SUB ().有关时间间隔单位论点,看到时间间隔

    mysql> SELECT DATE_ADD('2008-01-02', INTERVAL 31 DAY);—> '2008-02-02' mysql> SELECT ADDDATE('2008-01-02', INTERVAL 31 DAY);——>“2008-02-02”

    的方法调用时形式的第二个参数,MySQL将它作为一个要添加的天数的整数expr

    mysql> SELECT ADDDATE('2008-01-02', 31);——>“2008-02-02”
  • ADDTIME (expr1expr2

    ADDTIME ()增加了expr2expr1并返回结果。expr1是time或datetime表达式,和expr2是一个时间表达式。

    mysql> SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');-> '2008-01-02 01:01:01.000001' mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');——>“03:00:01.999997”
  • CONVERT_TZ (dtfrom_tzto_tz

    CONVERT_TZ ()转换datetime值dt从给定的时区from_tz到给定的时区to_tz并返回结果值。时区的指定请参见“MySQL服务器时区支持”章节5.1.15.这个函数返回如果参数无效。

    参数支持的范围之外时间戳类型时从from_tz到UTC时,不会发生转换。的时间戳范围描述于第11.2.1节“日期和时间数据类型语法”

    mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');——>“2004-01-01 13:00:00”mysql >选择CONVERT_TZ(' 2004-01-01 12:00:00 ', ' + 0 ', ' + 10”);-> '2004-01-01 22:00:00'
    请注意

    要使用命名的时区,例如“见过”欧洲/阿姆斯特丹的时,必须正确设置时区表。有关说明,请参见“MySQL服务器时区支持”章节5.1.15

  • CURDATE ()

    中的值返回当前日期YYYY-MM-DD名称格式,取决于函数是在字符串还是数字上下文中使用。

    SELECT CURDATE();查询mysql> '2008-06-13' SELECT CURDATE() + 0;- > 20080613
  • 当前日期当前日期()

    当前日期而且当前日期()都是同义词CURDATE ()

  • 当前时间当前时间([fsp])

    当前时间而且当前时间()都是同义词CURTIME ()

  • CURRENT_TIMESTAMPCURRENT_TIMESTAMP ([fsp])

    CURRENT_TIMESTAMP而且CURRENT_TIMESTAMP ()都是同义词现在()

  • CURTIME ([fsp])

    中的值返回当前时间“hh: mm: ss”hhmmss格式,取决于函数是在字符串还是数字上下文中使用。取值为会话所在的时区。

    如果fsp参数指定从0到6的小数秒精度,则返回值包括该多位数中的小数秒部分。

    SELECT CURTIME();-> '23:50:26' mysql> SELECT CURTIME() + 0;- > 235026.000000
  • 日期(expr

    提取date或datetime表达式的日期部分expr

    mysql> SELECT DATE('2003-12-31 01:02:03');——>“2003-12-31”
  • DATEDIFF (expr1expr2

    DATEDIFF ()返回expr1expr2表示为从一个日期到另一个日期的天数值。expr1而且expr2是日期或日期时间表达式。在计算中只使用值的日期部分。

    mysql> SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');-> 1 mysql> SELECT DATEDIFF('2010-11-30 23:59:59','2010-12-31');- > -31
  • DATE_ADD (日期,间隔expr单位DATE_SUB (日期,间隔expr单位

    这些函数执行日期算术。的日期参数指定开始日期或datetime值。expr指定要从开始日期加减的间隔值的表达式。expr作为字符串计算;它可能从a开始-对于负区间。单位是指示应在其中解释表达式的单元的关键字。

    有关时间间隔语法的更多信息,包括的完整列表单位的期望形式expr每个的参数单位值和用于时态算术中操作数解释的规则,请参见时间间隔

    返回值取决于参数:

    • 日期如果日期论证是一个日期价值和你的计算只涉及一年,一天部分(即无时间部分)。

    • DATETIME如果第一个参数是aDATETIME(或时间戳)值,或者如果第一个参数是a日期单位使用价值小时分钟,或

    • 字符串。

    以确保结果是DATETIME,你可以使用把()将第一个参数转换为DATETIME

    mysql> SELECT DATE_ADD('2018-05-01',INTERVAL 1 DAY);—> '2018-05-02' mysql> SELECT DATE_SUB('2018-05-01',INTERVAL 1 YEAR);-> '2017-05-01' mysql> SELECT DATE_ADD('2020-12-31 23:59:59', -> INTERVAL 1 SECOND);-> ' 21-01-01 00:00:00' mysql> SELECT DATE_ADD('2018-12-31 23:59:59', -> INTERVAL 1 DAY);-> ' 19-01-01 23:59:59' mysql> SELECT DATE_ADD(' 21-12-31 23:59:59', -> INTERVAL '1:1' MINUTE_SECOND);-> '2101-01-01 00:01:00' mysql> SELECT DATE_SUB(' 25-01-01 00:00:00', -> INTERVAL '1 1:1:1' DAY_SECOND);-> ' 24-12-30 22:58:59' mysql> SELECT DATE_ADD('1900-01-01 00:00:00', -> INTERVAL '-1 10' DAY_HOUR);SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY);-> '1997-12-02' mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002', -> INTERVAL '1.999999' SECOND_MICROSECOND);-> '1993-01-01 00:00:01.000001'
  • DATE_FORMAT (日期格式

    格式的日期根据格式字符串。

    下表所示的规格可用于格式字符串。的在格式说明符字符之前需要字符。说明符也适用于其他函数:STR_TO_DATE ()TIME_FORMAT ()UNIX_TIMESTAMP ()

    说明符 描述
    %的 工作日名称的缩写(太阳..
    % b 月名的缩写(1月..12月
    % c 月,数字(0..12
    % D 有英文后缀(第01日2日3日,……)
    % d 日期,数字(00..31
    % e 日期,数字(0..31
    % f 微秒(000000..999999
    % H 小时(00..23
    % h 小时(01..12
    %我 小时(01..12
    %我 分钟,数字(00..59
    % j 年月日(001..366
    % k 小时(0..23
    % l 小时(1..12
    % M 月份名称(1月..12月
    % m 月,数字(00..12
    % p
    r % 时间,12小时(hh: mm: ss紧随其后的是
    % S 秒(00..59
    % s 秒(00..59
    % T 时间,24小时(hh: mm: ss
    % U 周(00..53),其中星期日为一周的第一天;周()模式0
    % u 周(00..53),其中星期一为一星期的第一天;周()模式1
    % V 周(01..53),其中星期日为一周的第一天;周()模式2;使用% X
    % v 周(01..53),其中星期一为一星期的第一天;周()模式3;使用% x
    % W 工作日名称(周日..周六
    % w 星期几(0星期天= . .6=周六)
    % X 年份,表示星期天是一周第一天的那一周,数字,四位数字;使用% V
    % x 年份表示星期,星期一是一周的第一天,数字,四位数字;使用% v
    Y % 年份,数字,四位数
    y % 年份,数字(两位数字)
    % % 一个文字字符
    x x,任何x以上未列

    月和日说明符的范围以零开始,这是因为MySQL允许存储不完整的日期,例如“2014-00-00”

    的值控制日和月名称和缩写所使用的语言lc_time_names系统变量(第10.16节,“MySQL服务器地区支持”).

    % U% u% V,% v说明符,请参见说明周()函数获取有关模式值的信息。模式影响星期编号的发生方式。

    DATE_FORMAT ()返回一个字符串,该字符串具有给定的字符集和排序规则character_set_connection而且collation_connection这样它就可以返回包含非ascii字符的月份和工作日名称。

    mysql> SELECT DATE_FORMAT('2009-10-04 22:23:00', '%W %M %Y');-> 'Sunday October 2009' mysql> SELECT DATE_FORMAT('2007-10-04 22:23:00', '%H:%i:%s');——>“22:23:00”mysql >选择DATE_FORMAT(“1900-10-04 22:23:00”- >“y % D % % % D % m % b % j ');-> '4th 00 Thu 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> SELECT DATE_FORMAT('2006-06-00', '%d');——>“00”
  • DATE_SUB (日期,间隔expr单位

    参见描述DATE_ADD ()

  • 天(日期

    天()是的同义词吗DAYOFMONTH ()

  • DAYNAME (日期

    返回的工作日的名称日期.类的值控制名称使用的语言lc_time_names系统变量(第10.16节,“MySQL服务器地区支持”).

    mysql> SELECT DAYNAME('2007-02-03');——>“星期六”
  • DAYOFMONTH (日期

    返回一个月的哪一天日期,在范围内131,或0对于日期,如“0000-00-00”“2008-00-00”有零日部分。

    mysql> SELECT DAYOFMONTH('2007-02-03');- > 3
  • DAYOFWEEK (日期

    返回的工作日索引日期1星期天=,2=星期一,……7=周六)。这些索引值与ODBC标准相对应。

    mysql> SELECT DAYOFWEEK('2007-02-03');- > 7
  • DAYOFYEAR (日期

    返回一年的日子为日期,在范围内1366

    mysql> SELECT DAYOFYEAR('2007-02-03');- > 34
  • 提取(单位日期

    提取()函数使用相同的类型单位说明符,DATE_ADD ()DATE_SUB (),但从日期中提取部分,而不是执行日期算术。有关单位论点,看到时间间隔

    SELECT SELECT (FROM '2019-07-02');-> 2019 mysql> SELECT EXTRACT(YEAR_MONTH FROM '2019-07-02 01:02:03');-> 201907 mysql> SELECT EXTRACT(DAY_MINUTE FROM '2019-07-02 01:02:03');-> 20102 mysql> SELECT (MICROSECOND -> FROM '2003-01-02 10:30:00.000123');- > 123
  • FROM_DAYS (N

    给定一个天数N,返回一个日期价值。

    SELECT FROM_DAYS(730669);——>“2000-07-03”

    使用FROM_DAYS ()对旧的约会要小心。它不用于格列高利历(1582年)出现之前的值。看到第12.9节,“MySQL使用什么日历?”

  • FROM_UNIXTIME (unix_timestamp(,格式])

    对象的表示形式unix_timestamp参数中的值YYYY-MM-DD hh: mm: ssYYYYMMDDhhmmss格式,取决于函数是在字符串上下文中使用还是在数值上下文中使用。unix_timestamp内部时间戳值是否表示时间间隔“1970-01-01”就是UTC,如产生的UNIX_TIMESTAMP ()函数。

    返回值以会话时区表示。(客户端可以按照“MySQL服务器时区支持”章节5.1.15)。的格式字符串,如果给定,则使用与项中描述的相同的方式格式化结果DATE_FORMAT ()函数。

    SELECT FROM_UNIXTIME(1447430881);—> '2015-11-13 10:08:01' mysql> SELECT FROM_UNIXTIME(1447430881) + 0;-> 20151113100801 mysql> SELECT FROM_UNIXTIME(1447430881, -> '%Y %D %M %h:%i:%s %x');-> '2015年11月13日10:08:01 2015'
    请注意

    如果你使用UNIX_TIMESTAMP ()而且FROM_UNIXTIME ()如果要在非utc时区的值和Unix时间戳值之间进行转换,则转换是有损的,因为映射在两个方向上都不是一对一的。详细信息请参见UNIX_TIMESTAMP ()函数。

  • GET_FORMAT({日期时间| | DATETIME},{“欧元”|“美国”|“JIS”|“ISO”|“内部”})

    返回一个格式字符串。的组合使用时,此函数非常有用DATE_FORMAT ()STR_TO_DATE ()功能。

    第一个和第二个参数的可能值会导致几个可能的格式字符串(有关所使用的说明符,请参阅DATE_FORMAT ()功能描述)。ISO格式是指ISO 9075,而不是ISO 8601。

    函数调用 结果
    GET_FORMAT(日期、“美国”) ' % m % d % Y '
    GET_FORMAT(日期、JIS) ' % Y - % - % d '
    GET_FORMAT(日期、“ISO”) ' % Y - % - % d '
    GET_FORMAT(日期、“欧元”) ' % d % m % Y '
    GET_FORMAT(日期、“内部”) ' % Y % m % d '
    GET_FORMAT (DATETIME,“美国”) ' % Y - % - % d % h . %: % s的
    GET_FORMAT (DATETIME, JIS) ' % Y - % - % d % H: %我:% s的
    GET_FORMAT (DATETIME,“ISO”) ' % Y - % - % d % H: %我:% s的
    GET_FORMAT (DATETIME,“欧元”) ' % Y - % - % d % h . %: % s的
    GET_FORMAT (DATETIME,“内部”) ' % Y % m % d % H % % s的
    GET_FORMAT(时间、“美国”) ”我% h: %: % s % p '
    GET_FORMAT(时间、JIS) “我% H: %: % s”
    GET_FORMAT(时间、“ISO”) “我% H: %: % s”
    GET_FORMAT(时间、“欧元”) “% h . %: % s”
    GET_FORMAT(时间、“内部”) “我% H % % s”

    时间戳也可以用作第一个参数GET_FORMAT (),在这种情况下,函数返回与for相同的值DATETIME

    mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR'));mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA'));——>“2003-10-31”
  • 小时(时间

    返回时间时间.返回值的范围是023对于一天中的时间值。然而,的范围时间value实际上要大得多,所以小时返回值是否可以大于23

    mysql> SELECT HOUR('10:05:03');SELECT HOUR('272:59:59');- > 272
  • LAST_DAY (日期

    获取date或datetime值,并返回当月最后一天的对应值。返回如果参数无效。

    mysql> SELECT LAST_DAY('2003-02-05');——mysql> '2003-02-28' SELECT LAST_DAY('2004-02-05');—> '2004-02-29' mysql> SELECT LAST_DAY('2004-01-01 01:01:01');mysql> '2004-01-31' SELECT LAST_DAY('2003-03-32');- >零
  • 本地时间作用是(fsp])

    本地时间而且作用是()都是同义词现在()

  • LOCALTIMESTAMPLOCALTIMESTAMP ([fsp])

    LOCALTIMESTAMP而且LOCALTIMESTAMP ()都是同义词现在()

  • MAKEDATE (一年dayofyear

    返回给定年份和日期值的日期。dayofyear必须大于0还是结果是

    mysql> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32);-> '2011-01-31', '2011-02-01' mysql> SELECT MAKEDATE(2011,365), MAKEDATE(2014,365);-> '2011-12-31', '2014-12-31' mysql> SELECT MAKEDATE(2011,0);- >零
  • 挤出时间(小时一分钟第二个

    方法计算的时间值小时一分钟,第二个参数。

    第二个Argument可以有小数部分。

    mysql> SELECT MAKETIME(12,15,30);- - - - - - >“12:15:30
  • 微秒(expr

    从time或datetime表达式返回微秒数expr范围内的数字0999999

    mysql> SELECT MICROSECOND('12:00:00.123456');-> 123456 mysql> SELECT MICROSECOND('2019-12-31 23:59:59.000010');- > 10
  • 分钟(时间

    返回…的分钟时间,在范围内059

    mysql> SELECT MINUTE('2008-02-03 10:05:03');- > 5
  • 月(日期

    返回的月份日期,在范围内112一月至十二月,或0对于日期,如“0000-00-00”“2008-00-00”有0个月的部分。

    mysql> SELECT MONTH('2008-02-03');- > 2
  • MONTHNAME (日期

    返回月份的全名日期.类的值控制名称使用的语言lc_time_names系统变量(第10.16节,“MySQL服务器地区支持”).

    SELECT MONTHNAME('2008-02-03');——>“2”
  • 现在([fsp])

    中的值返回当前日期和时间YYYY-MM-DD hh: mm: ssYYYYMMDDhhmmss格式,取决于函数是在字符串还是数字上下文中使用。取值为会话所在的时区。

    如果fsp参数指定从0到6的小数秒精度,则返回值包括该多位数中的小数秒部分。

    mysql> SELECT NOW();-> '2007-12-15 23:50:26' mysql> SELECT NOW() + 0;- > 20071215235026.000000

    现在()返回一个常量时间,该时间指示语句开始执行的时间。(在存储函数或触发器中,现在()返回函数或触发语句开始执行的时间。)这与for的行为不同SYSDATE (),它返回执行的确切时间。

    mysql> SELECT NOW(), SLEEP(2), NOW();+---------------------+----------+---------------------+ | ()(2) | |睡眠现在 () | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36  | +---------------------+----------+---------------------+ mysql >选择SYSDATE(),(2)睡觉,SYSDATE ();+---------------------+----------+---------------------+ | SYSDATE()(2) | |睡眠SYSDATE () | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46  | +---------------------+----------+---------------------+

    此外,设置时间戳语句将影响返回的值现在()但不是通过SYSDATE ().这意味着二进制日志中的时间戳设置对调用没有影响SYSDATE ().将时间戳设置为非零值将导致后续的每次调用现在()返回该值。将时间戳设置为零可以取消这种效果,因此现在()再次返回当前日期和时间。

    参见描述SYSDATE ()有关这两个函数之间差异的更多信息。

  • PERIOD_ADD (PN

    增加了N月至期间P(格式为YYMMYYYYMM).返回格式的值YYYYMM

    请注意

    关于周期的论证P日期值。

    mysql> SELECT PERIOD_ADD(200801,2);- > 200803
  • PERIOD_DIFF (P1P2

    返回周期之间的月数P1而且P2P1而且P2应该在格式中YYMMYYYYMM.注意period参数P1而且P2日期值。

    SELECT PERIOD_DIFF(200802,200703);- > 11
  • 季度(日期

    返回的一年的季度日期,在范围内14

    mysql> SELECT QUARTER('2008-04-01');- > 2
  • 第二个(时间

    返回第二个时间,在范围内059

    SELECT SECOND('10:05:03');- > 3
  • SEC_TO_TIME (

    返回参数,转换为小时,分钟和秒,作为时间价值。结果的范围被限制在时间数据类型。如果实参对应于该范围之外的值,则会出现警告。

    SELECT SEC_TO_TIME(2378);- mysql> '00:39:38' SELECT SEC_TO_TIME(2378) + 0;- > 3938
  • STR_TO_DATE (str格式

    这是的倒数DATE_FORMAT ()函数。它需要一个字符串str格式字符串格式STR_TO_DATE ()返回一个DATETIME值,如果格式字符串同时包含日期和时间部分日期时间值,如果字符串只包含日期或时间部分。中提取的日期、时间或datetime值str是非法的,STR_TO_DATE ()返回并产生一个警告。

    服务器扫描str试图匹配格式到它。格式字符串可以包含文字字符和以.中的文字字符格式必须匹配字面上的str.格式说明符格式必须匹配日期或时间部分str.中可以使用的说明符格式,请参阅DATE_FORMAT ()功能描述。

    mysql >选择STR_TO_DATE (01, 2013, ' % d % m % Y ');——>“2013-05-01”mysql >选择STR_TO_DATE(2013年5月1日,' Y % M % d % ');——>“2013-05-01”

    的开始开始扫描str如果失败了格式发现不匹配。末尾的额外字符str将被忽略。

    mysql >选择STR_TO_DATE(“a09:30:17”、“h %: %我:% s ');——>“09:30:17”mysql >选择STR_TO_DATE(“a09:30:17”,“我% h: %: % s”);零mysql - > >选择STR_TO_DATE(“09:30:17a”,“我% h: %: % s”);——>“09:30:17”

    未指定的日期或时间部分的值为0,因此不完全指定的值str产生一个部分或全部部分设置为0的结果:

    SELECT STR_TO_DATE('abc','abc');——>“0000-00-00”mysql >选择STR_TO_DATE (' 9 ', ' % m ');——>“0000-09-00”mysql >选择STR_TO_DATE (' 9 ', ' % s ');——>“00:00:09”

    日期值部分的范围检查如中所述第11.2.2节“DATE, DATETIME和TIMESTAMP类型”.例如,这意味着允许部分值为0的日期或日期,除非SQL模式设置为不允许这样的值。

    mysql >选择STR_TO_DATE (' 00/00/0000 ', ' % m / % d / Y % ');——>“0000-00-00”mysql >选择STR_TO_DATE(‘04/31/2004’,‘% m / % d / Y % ');——>“2004-04-31”

    如果NO_ZERO_DATE启用SQL模式,不允许零日期。在这种情况下,STR_TO_DATE ()返回并生成一个警告:

    设置sql_mode = ";mysql >选择STR_TO_DATE (' 00/00/0000 ', ' % m / % d / Y % ');+---------------------------------------+ | STR_TO_DATE(“00/00/0000”、“% m / % d / Y % ') | +---------------------------------------+ | 0000-00-00  | +---------------------------------------+ mysql >设置sql_mode =“NO_ZERO_DATE”;mysql >选择STR_TO_DATE (' 00/00/0000 ', ' % m / % d / Y % ');+---------------------------------------+ | STR_TO_DATE(“00/00/0000”、“% m / % d / Y % ') | +---------------------------------------+ | 零  | +---------------------------------------+ mysql > \ G显示警告  *************************** 1。行***************************级别:警告代码:1411消息:错误的日期时间值:'00/00/0000'用于函数str_to_date
    请注意

    不能使用格式“% X % V”将年-周字符串转换为日期,因为如果周跨越了月的边界,年和周的组合就不能唯一标识年和月。要将年-周转换为日期,还应该指定工作日:

    mysql> SELECT STR_TO_DATE('200442 Monday', '%X%V %W');——>“2004-10-18”
  • SUBDATE (日期,间隔expr单位SUBDATE (expr

    的方法调用时时间间隔第二个论证的形式,SUBDATE ()是的同义词吗DATE_SUB ().有关时间间隔单位论点,见讨论DATE_ADD ()

    mysql> SELECT DATE_SUB('2008-01-02', INTERVAL 31 DAY);—> '2007-12-02' mysql> SELECT SUBDATE('2008-01-02', INTERVAL 31 DAY);——>“2007-12-02”

    第二种形式允许使用整数值.在这种情况下,它被解释为要从date或datetime表达式中减去的天数expr

    mysql> SELECT SUBDATE('2008-01-02 12:00:00', 31);-> '2007-12-02 12:00:00'
  • SUBTIME (expr1expr2

    SUBTIME ()返回expr1expr2表示为与。格式相同的值expr1expr1是time或datetime表达式,和expr2是一个时间表达式。

    mysql> SELECT SUBTIME('2007-12-31 23:59:59.999999','1 1:1:1.000002');-> '2007-12-30 22:58:58.999997' mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998');——>“00:59:59.999999”
  • SYSDATE ([fsp])

    中的值返回当前日期和时间YYYY-MM-DD hh: mm: ssYYYYMMDDhhmmss格式,取决于函数是在字符串还是数字上下文中使用。

    如果fsp参数指定从0到6的小数秒精度,则返回值包括该多位数中的小数秒部分。

    SYSDATE ()返回它执行的时间。这与for的行为不同现在(),它返回一个常量时间,指示语句开始执行的时间。(在存储函数或触发器中,现在()返回函数或触发语句开始执行的时间。)

    mysql> SELECT NOW(), SLEEP(2), NOW();+---------------------+----------+---------------------+ | ()(2) | |睡眠现在 () | +---------------------+----------+---------------------+ | 2006-04-12 13:47:36 | 0 | 2006-04-12 13:47:36  | +---------------------+----------+---------------------+ mysql >选择SYSDATE(),(2)睡觉,SYSDATE ();+---------------------+----------+---------------------+ | SYSDATE()(2) | |睡眠SYSDATE () | +---------------------+----------+---------------------+ | 2006-04-12 13:47:44 | 0 | 2006-04-12 13:47:46  | +---------------------+----------+---------------------+

    此外,设置时间戳语句将影响返回的值现在()但不是通过SYSDATE ().这意味着二进制日志中的时间戳设置对调用没有影响SYSDATE ()

    因为SYSDATE ()是否可以在同一语句中返回不同的值,而不受设置时间戳,如果使用基于语句的二进制日志记录,它是不确定的,因此对于复制不安全。如果这是个问题,您可以使用基于行的日志记录。

    或者,您也可以使用——sysdate-is-now引起的选项SYSDATE ()作…的别名现在().如果在复制源服务器和副本上都使用该选项,则此操作有效。

    的不确定性SYSDATE ()也意味着索引不能用于对引用它的表达式求值。

  • 时间(expr

    提取时间或日期时间表达式的时间部分expr并以字符串的形式返回。

    此函数对于基于语句的复制是不安全的。当您使用此函数时,将记录一个警告binlog_format设置为声明

    mysql> SELECT TIME('2003-12-31 01:02:03');-> '01:02:03' mysql> SELECT TIME('2003-12-31 01:02:03.000123');——>“01:02:03.000123”
  • TIMEDIFF (expr1expr2

    TIMEDIFF ()返回expr1expr2表示为时间值。expr1而且expr2是时间或日期和时间表达式,但两者必须具有相同的类型。

    返回的结果TIMEDIFF ()是否限制在允许的范围内时间值。或者,您也可以使用这两个函数中的任何一个TIMESTAMPDIFF ()而且UNIX_TIMESTAMP (),两者都返回整数。

    mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', -> '2000:01:01 00:00:00.000001');-> '-00:00:00.000001' mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001', -> '2008-12-30 01:01:01.000002');——>“46:58:57.999999”
  • 时间戳(expr时间戳(expr1expr2

    如果只有一个参数,此函数将返回date或datetime表达式expr作为一个日期时间值。通过两个参数,它添加了时间表达式expr2到date或datetime表达式expr1并以日期时间值的形式返回结果。

    mysql> SELECT TIMESTAMP('2003-12-31');-> '2003-12-31 00:00:00' mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');-> '2004-01-01 00:00:00'
  • TIMESTAMPADD (单位时间间隔datetime_expr

    添加整数表达式。时间间隔到date或datetime表达式datetime_expr.单位为时间间隔单位参数,它应该是以下值之一:微秒(微秒),第二个一分钟小时一天季度,或一年

    单位值可以使用如下所示的关键字之一指定,也可以使用前缀指定SQL_TSI_.例如,一天而且SQL_TSI_DAY两者都是合法的。

    mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02');-> '2003-01-02 00:01:00' mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02');——>“2003-01-09”
  • TIMESTAMPDIFF (单位datetime_expr1datetime_expr2

    返回datetime_expr2datetime_expr1,在那里datetime_expr1而且datetime_expr2是date或datetime表达式。一个表达式可能是一个日期,另一个是一个日期时间;日期值被视为具有时间部分的日期时间“就是”必要的地方。函数给出结果的单位(整数)单位论点。的法律价值单位是否与描述中列出的相同TIMESTAMPADD ()函数。

    SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');SELECT TIMESTAMPDIFF('2002-05-01','2001-01-01');SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');- > 128885
    请注意

    函数的date或datetime参数的顺序与时间戳()函数调用时使用两个参数。

  • TIME_FORMAT (时间格式

    这就像theDATE_FORMAT ()功能,但格式字符串只能包含小时、分钟、秒和微秒的格式说明符。其他指示符产生值或0

    如果时间值包含大于的小时部分23,% H而且% k小时格式说明符产生的值大于通常的范围0 . . 23.其他的小时格式说明符生成以12为模的小时值。

    mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %H %I %l');-> '100 100 04 04 4'
  • TIME_TO_SEC (时间

    返回时间参数,转换为秒。

    SELECT TIME_TO_SEC('22:23:00');-> 80580 mysql> SELECT TIME_TO_SEC('00:39:38');- > 2378
  • TO_DAYS (日期

    给定一个日期日期,返回一个日数(自0年以来的天数)。

    SELECT TO_DAYS(950501);SELECT TO_DAYS('2007-10-07');- > 733321

    TO_DAYS ()不打算与格列高利历(1582)出现之前的值一起使用,因为它没有考虑到日历更改时丢失的天数。对于1582年以前的日期(在其他地区可能是更晚的一年),这个函数的结果是不可靠的。看到第12.9节,“MySQL使用什么日历?”,以了解详情。

    记住,MySQL使用中的规则将日期中的两位数年份值转换为四位数形式第11.2节“日期和时间数据类型”.例如,“2008-10-07”而且“08-10-07”被视为相同的日期:

    SELECT TO_DAYS('08-10-07'), TO_DAYS('08-10-07');-> 733687, 733687

    在MySQL中,零日期定义为“0000-00-00”,即使该日期本身被认为是无效的。这意味着,对于“0000-00-00”而且“0000-01-01”TO_DAYS ()返回这里显示的值:

    SELECT TO_DAYS('0000-00-00');+-----------------------+ | to_days (' 0000-00-00 ') | +-----------------------+ | 零  | +-----------------------+ 1行集,警告(0.00秒)mysql >显示警告;+---------+------+----------------------------------------+ | 水平| |消息代码  | +---------+------+----------------------------------------+ | 警告| 1292 |错误的datetime值:0000-00-00 ' | +---------+------+----------------------------------------+ 1行组(0.00秒)mysql >选择TO_DAYS (' 0000-01-01 ');+-----------------------+ | to_days (' 0000-01-01 ') | +-----------------------+ | 1  | +-----------------------+ 1行集(0.00秒)

    这是正确的,无论是否ALLOW_INVALID_DATES已启用SQL server模式。

  • TO_SECONDS (expr

    给定日期或日期时间expr,返回自0年以来的秒数。如果expr不是有效的日期或日期时间值,返回

    SELECT TO_SECONDS(950501);mysql> SELECT TO_SECONDS('2009-11-29');mysql> SELECT TO_SECONDS('2009-11-29 13:43:32');-> 63426721412 mysql> SELECT TO_SECONDS(NOW());- > 63426721458

    就像TO_DAYS ()TO_SECONDS ()不打算与格列高利历(1582)出现之前的值一起使用,因为它没有考虑到日历更改时丢失的天数。对于1582年以前的日期(在其他地区可能是更晚的一年),这个函数的结果是不可靠的。看到第12.9节,“MySQL使用什么日历?”,以了解详情。

    就像TO_DAYS ()TO_SECONDS ()中的规则将日期中的两位数年份值转换为四位数形式第11.2节“日期和时间数据类型”

    在MySQL中,零日期定义为“0000-00-00”,即使该日期本身被认为是无效的。这意味着,对于“0000-00-00”而且“0000-01-01”TO_SECONDS ()返回这里显示的值:

    SELECT TO_SECONDS('0000-00-00');+--------------------------+ | TO_SECONDS (' 0000-00-00 ') | +--------------------------+ | 零  | +--------------------------+ 1行集,警告(0.00秒)mysql >显示警告;+---------+------+----------------------------------------+ | 水平| |消息代码  | +---------+------+----------------------------------------+ | 警告| 1292 |错误的datetime值:0000-00-00 ' | +---------+------+----------------------------------------+ 1行组(0.00秒)mysql >选择TO_SECONDS (' 0000-01-01 ');+--------------------------+ | TO_SECONDS (' 0000-01-01 ') | +--------------------------+ | 86400年  | +--------------------------+ 1行集(0.00秒)

    这是正确的,无论是否ALLOW_INVALID_DATES已启用SQL server模式。

  • UNIX_TIMESTAMP ([日期])

    如果UNIX_TIMESTAMP ()被称为没有日期参数,它返回一个表示时间间隔的Unix时间戳“1970-01-01”就是UTC。

    如果UNIX_TIMESTAMP ()被称为日期参数,它将返回参数的值作为秒since“1970-01-01”就是UTC。服务器解释日期作为会话时区的值,并将其转换为UTC的内部Unix时间戳值。(客户端可以按照“MySQL服务器时区支持”章节5.1.15)。的日期论证可能是日期DATETIME,或时间戳字符串,或数字YYMMDDYYMMDDhhmmss名称,或YYYYMMDDhhmmss格式。如果参数包含时间部分,则可以选择包含小数秒部分。

    如果没有给出参数或参数不包括小数秒部分,则返回值为整数小数如果给出的参数包含小数秒部分。

    日期论证是一个时间戳列,UNIX_TIMESTAMP ()直接返回内部时间戳值,没有隐式string-to-Unix-timestamp转换。

    参数值的有效范围与时间戳数据类型:“1970-01-01 00:00:01.000000”UTC,“2038-01-19 03:14:07.999999”UTC。如果将超出范围的日期传递给UNIX_TIMESTAMP (),它返回0

    mysql> SELECT UNIX_TIMESTAMP();-> 1447431666 mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19');-> 1447431619 mysql> SELECT UNIX_TIMESTAMP('2015-11-13 10:20:19.012');- > 1447431619.012

    如果你使用UNIX_TIMESTAMP ()而且FROM_UNIXTIME ()如果要在非utc时区的值和Unix时间戳值之间进行转换,则转换是有损的,因为映射在两个方向上都不是一对一的。例如,由于本地时区更改的约定,例如夏时制(DST),可以UNIX_TIMESTAMP ()将非utc时区内不同的两个值映射到相同的Unix时间戳值。FROM_UNIXTIME ()将该值映射回仅一个原始值。下面是一个示例,使用不同的值见过时区:

    SET time_zone = 'MET';mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');+---------------------------------------+ | UNIX_TIMESTAMP (' 2005-03-27 03:00:00 ') | +---------------------------------------+ | 1111885200  | +---------------------------------------+ mysql >选择UNIX_TIMESTAMP(“2005-03-27 02:00:00”);+---------------------------------------+ | UNIX_TIMESTAMP (' 2005-03-27 02:00:00 ') | +---------------------------------------+ | 1111885200  | +---------------------------------------+ mysql >选择FROM_UNIXTIME (1111885200);+---------------------------+ | FROM_UNIXTIME (1111885200 ) | +---------------------------+ | 2005-03-27 03:00:00  | +---------------------------+
    请注意

    要使用命名的时区,例如“见过”欧洲/阿姆斯特丹的时,必须正确设置时区表。有关说明,请参见“MySQL服务器时区支持”章节5.1.15

    如果你想做减法UNIX_TIMESTAMP ()列,您可能需要将它们转换为有符号整数。看到第12.11节“强制转换函数和运算符”

  • UTC_DATEUTC_DATE ()

    中的值返回当前UTC日期YYYY-MM-DD名称格式,取决于函数是在字符串还是数字上下文中使用。

    SELECT UTC_DATE(), UTC_DATE() + 0;-> '2003-08-14', 20030814
  • UTC_TIMEUTC_TIME ([fsp])

    中的值返回当前UTC时间“hh: mm: ss”hhmmss格式,取决于函数是在字符串还是数字上下文中使用。

    如果fsp参数指定从0到6的小数秒精度,则返回值包括该多位数中的小数秒部分。

    SELECT UTC_TIME(), UTC_TIME() + 0;-> '18:07:53', 180753.000000
  • UTC_TIMESTAMPUTC_TIMESTAMP ([fsp])

    中的值返回当前UTC日期和时间YYYY-MM-DD hh: mm: ssYYYYMMDDhhmmss格式,取决于函数是在字符串还是数字上下文中使用。

    如果fsp参数指定从0到6的小数秒精度,则返回值包括该多位数中的小数秒部分。

    SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0;-> '2003-08-14 18:08:04', 20030814180804.000000
  • 周(日期(,模式])

    的周号日期.的双参数形式周()使您能够指定一周是从周日开始还是从周一开始,以及返回值是否应该在的范围内053或从153.如果模式参数的值将被省略default_week_format使用系统变量。看到第5.1.8节,“服务器系统变量”

    下表描述了如何模式论证工作。

    模式 每周第一天 范围 第一周是第一周……
    0 周日 0-53 今年只有一个星期天
    1 周一 0-53 今年有4天以上
    2 周日 —53 今年只有一个星期天
    3. 周一 —53 今年有4天以上
    4 周日 0-53 今年有4天以上
    5 周一 0-53 今年有一个星期一
    6 周日 —53 今年有4天以上
    7 周一 —53 今年有一个星期一

    模式的意义的值今年如果有4天以上,周的编号根据ISO 8601:1988:

    • 如果包含1月1日的一周在新的一年中有4天或4天以上,它是第1周。

    • 否则,它是前一年的最后一周,下一周是第一周。

    mysql> SELECT WEEK('2008-02-20');SELECT WEEK('2008-02-20',0);SELECT WEEK('2008-02-20',1);mysql> SELECT WEEK('2008-12-31',1);- > 53

    如果日期落在前一年的最后一周,MySQL将返回0如果不使用23.6,或7作为可选选项模式论点:

    mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);-> 2000, 0

    有人可能会说周()应该返回52因为给定的日期实际上发生在1999年的第52周。周()返回0因此返回值为周:给定年份的周数这就利用了周()当与从日期中提取日期部分的其他函数结合使用时,函数是可靠的。

    如果您希望得到一个关于年份的结果,其中包含给定日期的一周的第一天,请使用025,或7作为可选选项模式论点。

    mysql> SELECT WEEK('2000-01-01',2);- > 52

    或者,使用YEARWEEK ()功能:

    mysql> SELECT YEARWEEK('2000-01-01');-> 199952 mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);——>“52”
  • 工作日(日期

    返回的工作日索引日期0=周一,1=星期二,……6=周日)。

    mysql> SELECT WEEKDAY('2008-02-03 22:23:00');mysql> SELECT WEEKDAY('2007-11-06');- > 1
  • WEEKOFYEAR (日期

    返回日期的日历周,作为范围中的数字153WEEKOFYEAR ()相容性函数等价于周(日期,3)

    mysql> SELECT WEEKOFYEAR('2008-02-20');- > 8
  • 年(日期

    年的回报日期,在范围内10009999,或0日期。

    mysql> SELECT YEAR('1987-01-01');- > 1987
  • YEARWEEK (日期YEARWEEK (日期模式

    返回年份和星期的日期。对于一年的第一周和最后一周,结果中的年份可能不同于日期参数中的年份。

    模式参数的工作原理和模式参数周().对于单参数语法,a模式使用0值。不像周()的价值。default_week_format不影响YEARWEEK ()

    mysql> SELECT YEARWEEK('1987-01-01');- > 198652

    周数与周()函数将返回(0)为可选参数01,因为周()然后返回给定年份上下文中的周。