mysql数据库的日期和时间函数

函数可能包含有效和无效的日期,如果是无效的日期,则函数会返回0或NULL。

一、按类型分组的日期和时间函数

按照函数的作用,对这些日期和时间函数进行分类:检索日期或时间、从给定日期或时间中提取出元素以及根据给定日期或时间执行相关计算。

  1. 确定日期或时间的函数
    CURDATE( )、CURRENT_DATE( )、CURRENT_TIME( )、CURRENT_TIMESTAMP( )、
    CURTIME( )、LOCALTIME( )、LOCALTIMESTAMP( )、NOW( )、SYSDATE( )、
    UNIX_TIMESTAMP( )、UTC_DATE( )、UTC_TIME( )、UTC_TIMESTAMP( )

  2. 提取并格式化日期或时间的函数
    DATE( )、DATE_FORMAT( )、DAY( )、DAYNAME( )、DAYOFMONTH( )、DAYOFWEEK( )、
    DAYOFYEAR( )、EXTRACT( )、GET_FORMAT( )、HOUR( )、LAST_DAY( )、MAKEDATE( )、
    MAKETIME( )、MICROSECOND( )、MINUTE( )、MONTH( )、MONTHNAME( )、QUARTER( )、
    SECOND( )、STR_T0_DATE( )、TIME( )、TIME_FORMAT( )、TIMESTAMP( )、WEEK( )、
    WEEKDAY( )、WEEKOFYEAR( )、YEAR( )、YEARWEEK( )

  3. 计算和修改日期或时间的函数
    ADDDATE( )、ADDTIME( )、CONVERT_TZ( )、DATE_ADD( )、DATE_SUB( )、DATEDIFF( )、
    FROM_DAYS( )、FROM_UNIXTIME( )、PERIOD_ADD( )、PERIOD_DIFF( )、SEC_TO_TIME()、SLEEP( )、SUBDATE( )、SUBTIME( )、TIME_TO_SEC( )、TIMEDIFF( )、
    TIMESTAMPADD( )、TIMESTAMPDIFF( )、TO_DAYS( )

二、按字母排序的日期和时间函数(上面的函数的说明)

  1. ADDDATE( )
    该函数的功能是,为给定的日期或时间增加一个时间间隔。这个函数与DATE_ ADD( )是同义词:该函数更为详细的信息和时间间隔类型,可以参阅本章后面对该函数的定义部分。第二个函数从MySQL 4.1版本开始才是可用的,它的语法较为简单。在函数DATE_ ADD( )中,这种简略的语法是不可用的。

  2. ADDTIME( )
    该函数的第一个参数是一个字符串或一个时间或8期时间格式的列,第二个参数是一个时间的增量,它返回一个日期时间型的数据。如果给定的参数为负数,那么该函数只提取时间部分。在这种情况下,它的功能与SUBTIME( ) 函数是等价的。从MySQL 4.1.1版本开始,SUBTIME( )函数才是可用的。

  3. CONVERT_TZ( )
    该函数把第一个时区内的日期时间转化为第二个时区内的8期时间。要实现这个功能,需要在mysql数据库中安装时区表。如果系统中没有安装时区表,可以到MySQL AB的官方网站(tp://d/v.mysql.com/downloads/imezoneshtml) 去下载时区表。把时区表复制到mysql数据目录的子目录下。之后,使用系统命令如chown和chmod来修改mysql数据库的用户所有权和用户权限,然后,重新启动服务器使更改生效。从MySQL 4.1.3版本开始,该函数才是可用的。

  4. CURDATE( )
    该函数以yyy-mm- dd的格式返回当前系统时间。如果这个函数用作数字计算的一部分,那么它便返回一个yyyymmdd格式的日期。你可以在SELECT、INSERT和UPDATE语句或WHERE子句中使用该函数来设置一个值。CURDATE( )函数是CURRENT_DATE( )函数的同义词: CURRENT_DATE( )函数

  5. CURRENT_DATE( )
    该函数的功能是返回当前日期。通常情况下,并不需要使用圆括号。该函数与CURDATE( )是同义词。可以在SELECT、INSERT和UPDATE语句中使用它以便动态地设置这些值,或者在WHERE子句中使用该函数。

  6. CURRENT_TIME( )
    该函数的功能是返回当前时间,其格式为hh:mm:ss。如果这个函数用作数字计算的一部分,那么它将返回hhmss格式的时间。通常情况下,并不需要圆括号。它与CURTIME( )函数是同义词。

  7. CURRENT_TIMESTAMP( )
    该函数的功能是返回当前日期时间,其格式为yyy-mm-dd hh:mm:ss。如果它作为数字计算的一部分,那么它会返yyymmddhhmmss格式的日期时间值。通常情况下,并不需要圆括号。它与NOW( )函数是同义词。

  8. CURTIME( )
    该函数以hh:mm:ss的格式返回当前的系统时间。如果它作为数字计算的一部分时,其返回格式为hhmmss. CURTIME( )函数CURRENT_TIME( )函数的别名。

  9. DATE( )
    根据提交的日期或日期时间格式的字符串、值或表达式,该函数返回一个日期值。从MySQL 4.1.1版本开始,这个函数才是可用的。

  10. DATE_ADD( )
    使用给定的日期或日期时间,这个函数把日期或日期时间增加了一个时间间隔值。该函数的功能与DDDATE( )函数十分类似。如果日期或日期时间的参数为空,结果将返回日期格式的数值。否则,结果将返回一个日期时间格式的数值。

  11. DATE_FORMAT( )
    根据函数的第二个参数中的格式化代码串,该函数返回一个格式化的日期和时间值。

  12. DATE_SUB( )
    该函数的功能是:从指定的日期或时间型数据列中减去一个相应的值,返回它们之间的差值。

  13. DATEDIFF( )
    该函数返回二个给定日期间的差值。尽管其中的参数可以为日期时间格式,但是仅在使用日期格式时才会计算它们间的差值。从MySQL 4.1.1版本开始,该函数才是可用的。

  14. DAY( )
    该函数返回指定日期在某月中的天数。从MySQL 4.1.1版本开始,该函数才是可用的,它与DAYOFMONTH函数是同义词,本书随后会讲解它的用法。

  15. DAYNAME( )
    该函数返回给定日期对应的工作日名称。从MySQL 5.1.15版本开始,使用系统变量1c_ time_ names来确定使用哪一种名称。你可以使用SET语句修改这个变量的值。在MySQL官方网站(tp://dev.mysql.com/doc/refman/5.1/enlocale-support.html) 中的MySQL Server Locale Support页面,详细描述了可用的时间名称。

  16. DAYOFMONTH( )
    该函数返回给定日期在某一月中对应的日期。如果日期中的某一天超出了一个月的总天数,(如2008-02-30) ,它将返回NULL并在执行SHOW WARNINGS语句时给出警告信息。

  17. DAYOFWEEK( )
    该函数返回给定日期对应的工作日索引。周日对应的返回值为1,周六对应的返回值为7。

  18. DAYOFYEAR( )
    该函数返回给定日期在一年中对应的天数。如果参数中的日期是1月1日,那么它的返回值为1;如果参数中的日期是12月31日,那么它的返回值为365,闰年除外,此时它的返回值为366。

  19. EXTRACT( )
    该函数负责从格式化的日期或日期时间类型的表达式中提取日期或时间信息。这个函数可以使用的参数类型与DATE_ ADD函数中时间间隔的用法相同。

  20. FROM_DAYS( )
    该函数返回给定天数对应的日期值,参数中的天数源于当前使用的标准日历值。当格里历(Gregorian calendar)成为标准8历以后,在1582年以前的日期便会出现问题。与之相反的函数为TO_DAYS( )函数。

  21. FROM_UNIXTIME( )
    该函数返回一个基于UNIX时间的日期,该日期采用格林尼治标准时间,从1970年1月1日开始计数,用秒度量,将12:00:01作为UNIX时间(或时代)的第一秒。第二个可选参数使用DATE_ FORMAT函数中的格式化代码对结果进行格式化。如果该函数不作为数字表达式的一部分,那么它的返回值格式为yyyy-mm-dd。否则,它将返yyymdd格式的日期类型数据。

  22. GET_FORMAT( )
    基于函数中的第二个参数作为标准,该函数返回指定数据类型的格式。返回的格式化代码同样适用于DATE_ FORMAT( )函数。数据类型可以是DATE、TIME、DATETIME或GET_FORMAT( )。
    TIMESTAMP类型,类型格式可以是EUR、INTERNAL、ISO、JIS或USA。从MySQL 4.1.1版本开始,该函数才是可用的。从MySQL 4.1.4版本开始,才可以使用TIMESTAMP类型的数据。

  23. HOUR( )
    该函数返回给定时间的小时数。对于那些包含日期时间(如DATETIME) 的列,它的结果范围为0到23。对于那些包含TIME数据类型的列,它们并不受日期取值范围的限制,函数的返回值可能会超过23。

  24. LAST_DAY( )
    对于给定的日期或日期时间值,该函数返回月份中最后一天的日期。对于无效的日期,它将返回NULL。从MySQL 4.1.1版本开始,该函数才是可用的。

  25. LOCALTIME( )
    该函数以yyy-mm-dd hh:mm:ss的格式返回当前系统的日期。当它参与计算时,返回值则为yyyymmddhhmmss.nnnnn这样的数字格式,分隔符的精度是微秒。括号并不是必需的。从MySQL 4.0.6版本开始,该函数才是可用的,它与L0CALTIMESTAMP( )函数以及NOW( )函数是同义词。

  26. LOCALTIMESTAMP( )
    该函数以yyyy-mm-dd hh:mm:ss的格式返回 当前系统的日期。当它参与计算时,返回值则为yyyymmddhhmmss. nnnnnn这样的数字格式,分隔符的精度是微秒。它与LOCALTIMESTAMP( )函数以及NOW( )函数是同义词。

  27. MAKEDATE( )
    该函数用于确定给定年份开始的请求日期,它通过在第二个参数中添加给定的日期数来实现。它的返回格式为yyyy-mm-dd。如果给定的日期值小于或等于0,那么它将返回NULL值。然而,该函数可以接受超过-年中的最大日期值。根据一年中的天数, 函数的返回值可能是下一年或其他年份中的合适日期。从MySQL 4.1.1版本开始,该函数才是可用的。

  28. MAKETIME( )
    该函数把给定的小时数、分钟数和秒数转换为hh:mm:ss格式的时间。如果参数中的分钟数和秒数值超过了59,它将返回一个NULL值。然而,这个函数接受的小时数可以超过24。从MySQL 4.1.1版本开始,该函数才是可用的。

  29. MICROSECOND( )
    该函数用于提取给定时间值的微秒数。该函数的执行结果包含6位字符,不足6位的则在右侧添0补齐。当参数中的日期或日期时间并没有包含特定的微秒值时,函数的默认结果为0,因此,函数的返回值为00000。从MySQL 4.1.1版本开始,该函数才是可用的。

  30. MINUTE( )
    该函数返回给定时间的分钟数(0-59)。

  31. MONTH( )
    该函数依据参数中的日期值,返回月份的数值(0~12)。因为日期列可以包含0值(如,‘0000-00-00’) ,在这种情况下,函数的返回值为0。然而,如果给定的日期为无效的非0日期值时,它将返回NULL值。

  32. MONTHNAME( )
    该函数返回给定日期的月份名。从MySQL 5.1.5版本开始,lc _time_names系统变量用来确定实际用到的月份名。你可以使用SET语句修改这个变量的值。请参阅MySQL文档页面中的MySQL Server Locale Support (tp://ldev.mysql.com/doc/refman/5.l/en/locale-support.html)以查看时间名的可用本地值。

  33. NOW( )
    该函数返回当前的日期和时间。如果这个函数用于数字计算,那么它的返回值格式为yyyymmdd;否则,其返回值的格式为yyyy-mm-dd hh:mm:ss.nnnnn。它与L0CALTIME( )和LOCALTIMESTAMP( )是同义词。

  34. PERIOD_ADD( )
    该函数把指定月份加到一个日期,其结果是一个字符串型的值,且仅仅包含年份和月份,格式为yyyym或yymm。

  35. PERIOD_DIFF( )
    该函数返回二个参数中日期间的差值。这里的参数必须是字符串格式,而且仅仅包含年份和月份,格式为yyyymm或yymm。

  36. QUARTER( )
    这个函数返回给定日期的季度值(1-4),每年的第1季度(即前三个月)值为1。

  37. SEC_TO_TIME( )
    该函数为给定的秒数返回格式为hh:mm:ss的时间值。如果它用于数字计算,返回结果的格式则为hhmmss。

  38. SECOND( )
    该函数返回给定时间对应的秒数值(0-59)。

  39. SLEEP( )
    该函数将暂停SQL语句的执行,休眠的时间为参数中给定的秒数。该函数如果成功执行的话,其返回值为0,否则,其返回值为1。从MySQL 5.0.12版本开始,该函数才是可用的。然而,它并不是一个精确的日期时间函数,由于它属于时间方面的函数,所以本书在这里介绍了它的内容。

  40. STR_T0_DATE( )
    该函数根据第二个参数中指定的字符串格式,返回该字符串对应的日期和时间。在函数的执行结果中包含了日期或时间,或二者兼有。要想确定返回字符串的格式,则必须把函数的第二个参数设定为一个格式化的字符串,这里的格式化字符串与DATE FORMAT( )函数中的格式化字符串是一样的:请在那些格式化字符串列表中查看它的定义。从MySQL 4.1.1版本开始,该函数才是可用的。

  41. SUBDATE( )
    该函数用于从DATE或TIME列的结果中减去一个日期或时间间隔。它的别名为DATE_SUB( )。 如果间隔数是负值,那么该函数执行的是增加而不是减去指定的间隔值,此时它与ADDDATE( )函数是等价的。

  42. SUBTIME( )
    该函数根据第二个参数中指定的字符串或递减的时间列返回一个日期和时间值。如果函数的第二个参数是负值,那么函数执行的是加的功能,此时它与ADDTIME( )函数是等价的。从MySQL 4.1.1版本开始,该函数才是可用的。

  43. SYSDATE( )
    SYSDATE( )函数返 回在执行该函数时的系统时间。函数返回值的格式yyyy-mm-dd hh:mm:ss,但是如果它作为数字计算的-部分,其返回格式为yyyymmddhhmmss。如果该函数在计算时涉及微秒,那么它便会显示微秒值。

  44. TIME( )
    该函数根据参数中给定的字符串或包含日期时间的数据列,返回一个时间值。从MySQL4.1.1版本开始,该函数才是可用的。

  45. TIME_FORMAT( )
    该函数返回指定的时间元素的时间值,其格式要参考第二个参数中的格式化代码。关于格式化代码的用法,请参阅本章前面的DATE_FORMAT( ) 函数部分的表12-1的内容。如果函数的第二个参数中的格式化代码不是时间格式,它将返回NULL或0。

  46. TIME_TO_SEC( )
    该函数返回给定时间表示的秒数。它的功能刚好与SEC_TO_TIME( )函数相反。

  47. TIMEDIFF( )
    该函数返回二个给定时间的差值。尽管给定的函数参数可以是时间或8期时间格式的,但这二个参数中的时间必须是相同的数据类型,否则,它将返回NULL。在给定的值中可以包含微秒。如果已包含了微秒并且结果不是0微秒,那么在结果中将返回这些微秒值。从MySQL 4.1.1版本开始,该函数才是可用的。

  48. TIMESTAMP( )
    timestamp( ) 函数的二个参数可以是字符串型,也可以是日期或时间型的数据,该函数用于合并日期和时间型的数据:这个函数返回结果的格式为yyyy-mm dd hh:mm:ss。如果函数的参数中仅有日期或时间型的数据,对于缺少的参数,它将返回0。从MySQL 4.1.1版本开始,该函数才是可用的。

  49. TIMESTAMPADD( )
    该函数把一个给定大小的时间间隔值添加到给定的日期或时间上。它能接受的时间间隔类型有: FRAC_SECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER和YEAR。为了保证与其他系统相兼容,你可以将SQL_TSI前缀舔加到时间间隔名中(如,用于YEAR类型的SQL_TSI_YEAR)。从MySQL 5.0.0版本开始该函数才是可用的,但是它们可以接受的时间间隔名并不确定。

  50. TIMESTAMPDIFF( )
    该函数返回二个给定的仅用于比较的时间间隔之间的差值。该函数中的时间间隔与TIMESTAMPADD()函数中的时间间隔是相同的。从MySQL 5.0.0版本开始,该函数才是可用的。

  51. TO_DAYS( )
    该函数返回给定日期对应的天数,这里的日期指的是当前使用的标准日历。当格里历成为时间的标准以后,在1582年以前的日期便会出现问题。与之相反的函数是FROM_DAYS( )。

  52. UNIX_TIMESTAMP( )
    该函数用于计算从UNIX纪元(格林尼治时间(GMT,Greenwich Mean Time),1970年1月1日)以来的时间数,用秒度量。如果没有调用参数,该函数返回当前日期和时间的UNIX时间值。该函数可以把任意的日期和时间值(直接地或通过列中的值)转换成UNIX时间。

  53. UTC_DATE( )
    该函数返回当前日期的标准时间(UTC,Universal Time Coordinated),其格式为yyyy-mm-dd;如果该函数用于数字计算,那么它的返回值格式为yyyymmdd。从MySQL 4.1.1版本开始,该函数才是可用的。UTC_DATE( )函数中的括号是可选的。

  54. UTC_TIME( )
    UTC_TIME( )函数返回当前的UTC时间,其格式为hh:mm:ss;该函数如果用于数字计算,那么它的返回值格式为hhmmss。当它作为数字使用时,其返回结果中会包含微秒。从MySQL 4.1.1版本开始,该函数才是可用的。该函数中的括号是可选的。

  55. UTC_TIMESTAMP( )
    该函数返回当前的UTC日期和时间,其格式为yyyy-mm-dd hh:mm:ss;该函数如果用于数字计算,那么它的返回值格式为yyyymmddhhmmss.当它作为数字使用时,返回结果中会包含微秒。从MySQL 4.1.1版本开始,该函数才是可用的。该函数中的括号是可选的。使用UTC_TIME( )函数,仅能得到UTC时间;而使用UTC_DATE( )函数,仅能得到UTC日期。

  56. WEEK( )
    该函数返回日期为一年中的第几周。这个函数看起来似乎很简单。然而,它是非常复杂的,因为在一年中52周之外还有一天或二天(如, 52x7=364) ;一年中的第一天往往不是一周的第一天。 当一年从周日开始时,如果你将星期天认为是一周的第一天的话,1月1日便是一年中的第一周。在这种情况下,该函数将返回0或1,具体值将取决于你认为0是第一个数还是1是第一个数。如果你认为星期一是一周中的第一天,1月1日便是星期天,这样问题便出现了,你认为该日期是去年的最后一周还是今年的第0周,并用1表示当年的整个周。当执行WEEK( )函数时,MySQL考虑到了这些所有的可能性,
    可以在第二个参数中指定相应的模式来表示这些可能性。
    该函数的第二个参数的取值范围为0到7。偶数代表星期日是一周的第一天,奇数代表星期一是一周中的第一天。编码0、1、4和5决定返回值的范围是0~53;编码2、3、6和7决定返回值的范围是1到53;编码0、2、5和7确定了给出的日期的结果,这尤其适用于确定年份中第一天就是一周中第一天的日期。

  57. WEEKDAY( )
    WEEKDAY( )函数返 回工作日对应的索引。在该函数中,星期一被认为是一周的第一天,它的返回值为0。星期天对应的返回值为6。

  58. WEEKOFYEAR( )
    该函数返回给定日期的日历周,确定出它是一年中的第几周。这是MySQL 4.1.1版本中新增加的函数,仅在WEEK( )函数的模式为3时,它才与WEEK( )函数为同义词,该函数的模式是无法更改的。

  59. YEAR( )
    该函数返回给定日期对应的年份。它的返回值范围为1000到9999,如果参数值为0,那么返回值也为0。

  60. YEARWEEK( )
    该函数返回给定日期对应的年份和月份,其格式为: yyyyMM,默认情况下,一周的第一天是星期日,这是计算的基础。当然,你也可以把星期一作为一周的第一天,只需将函数的第二个参数值设为1即可。

参考书籍

  • 《深入理解MySQL核心技术》

你可能感兴趣的:(mysql)