日期和时间函数
TiDB 支持使用 MySQL 5.7 中提供的所有日期和时间函数。
注意
- 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()
函数。