日期和时间函数

TiDB 支持使用 MySQL 8.0 中提供的所有日期和时间函数

日期和时间函数 - 图1

注意

  • MySQL 常常会接受格式不正确的日期和时间值。例如,'2020-01-01\n\t01:01:01''2020-01_01\n\t01:01' 被视为有效的日期和时间值。
  • TiDB 会尽量与 MySQL 的行为保持一致,但可能无法在所有情况下完全匹配。建议使用正确的格式化日期,TiDB 文档中未记录将如何处理格式不正确的值。

日期时间函数表

函数名功能描述
ADDDATE()将时间间隔添加到日期上
ADDTIME()时间数值相加
CONVERT_TZ()转换时区
CURDATE()返回当前日期
CURRENT_DATE(), CURRENT_DATE与 CURDATE() 同义
CURRENT_TIME(), CURRENT_TIME与 CURTIME() 同义
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP与 NOW() 同义
CURTIME()返回当前时间
DATE()从日期或日期/时间表达式中提取日期部分
DATE_ADD()将时间间隔添加到日期上
DATE_FORMAT()返回满足指定格式的日期/时间
DATE_SUB()从日期减去指定的时间间隔
DATEDIFF()返回两个日期间隔的天数
DAY()与 DAYOFMONTH() 同义
DAYNAME()返回星期名称
DAYOFMONTH()返回参数对应的天数部分(1-31)
DAYOFWEEK()返回参数对应的星期下标
DAYOFYEAR()返回参数代表一年的哪一天 (1-366)
EXTRACT()提取日期/时间中的单独部分
FROM_DAYS()将天数转化为日期
FROM_UNIXTIME()将 Unix 时间戳格式化为日期
GET_FORMAT()返回满足日期格式的字符串
HOUR()提取日期/时间表达式中的小时部分
LAST_DAY返回参数中月份的最后一天
LOCALTIME(), LOCALTIME与 NOW() 同义
LOCALTIMESTAMP, LOCALTIMESTAMP()与 NOW() 同义
MAKEDATE()根据给定的年份和一年中的天数生成一个日期
MAKETIME()根据给定的时、分、秒生成一个时间
MICROSECOND()返回参数的微秒部分
MINUTE()返回参数的分钟部分
MONTH()返回参数的月份部分
MONTHNAME()返回参数的月份名称
NOW()返回当前日期和时间
PERIOD_ADD()在年-月表达式上添加一段时间(数个月)
PERIOD_DIFF()返回间隔的月数
QUARTER()返回参数对应的季度(1-4)
SEC_TO_TIME()将秒数转化为 ‘HH:MM:SS’ 的格式
SECOND()返回秒数(0-59)
STR_TO_DATE()将字符串转化为日期
SUBDATE()当传入三个参数时作为 DATE_SUB() 的同义
SUBTIME()从一个时间中减去一段时间
SYSDATE()返回该方法执行时的时间
TIME()返回参数的时间表达式部分
TIME_FORMAT()格式化时间
TIME_TO_SEC()返回参数对应的秒数
TIMEDIFF()返回时间间隔
TIMESTAMP()传入一个参数时候,该方法返回日期或日期/时间表达式,传入两个参数时候,返回参数的和
TIMESTAMPADD()在日期/时间表达式上增加一段时间间隔
TIMESTAMPDIFF()从日期/时间表达式中减去一段时间间隔
TO_DAYS()将参数转化对应的天数(从第 0 年开始)
TO_SECONDS()将日期或日期/时间参数转化为秒数(从第 0 年开始)
UNIX_TIMESTAMP()返回一个 Unix 时间戳
UTC_DATE()返回当前的 UTC 日期
UTC_TIME()返回当前的 UTC 时间
UTC_TIMESTAMP()返回当前的 UTC 日期和时间
WEEK()返回参数所在的一年中的星期数
WEEKDAY()返回星期下标
WEEKOFYEAR()返回参数在日历中对应的一年中的星期数
YEAR()返回参数对应的年数
YEARWEEK()返回年数和星期数

MySQL 兼容性

TiDB 支持 STR_TO_DATE() 函数,但是无法解析所有的日期和时间值。此外,TiDB 不支持以下日期和时间格式化选项:

格式说明
“%a”星期名的缩写(例如 Sun..Sat)
“%D”带英文后缀的月份日期(例如 0th,1st,2nd,3rd)
“%U”星期 (00..53),星期日是每周的第一天;WEEK() mode 0
“%u”星期 (00..53),星期一是每周的第一天;WEEK() mode 1
“%V”星期 (01..53),星期日是每周的第一天;WEEK() mode 2;和 “%X” 一起使用
“%v”星期 (01..53),星期一是每周的第一天;WEEK() mode 3;和 “%x” 一起使用
“%W”星期名(例如 Sunday..Saturday)
“%w”一周中的天名 (0=Sunday..6=Saturday)
“%X”星期天是每周第一天的年份,数字类型,四位数字
“%x”星期一是每周第一天的年份,数字类型,四位数字

更多信息,参见 GitHub Issue #30082

相关系统变量

default_week_format 变量影响 WEEK() 函数。