日期和时间函数
以下为GaussDB数据库M-Compatibility兼容性日期时间函数公共差异说明。
- 当SELECT子查询中包含且仅包含时间函数,且函数入参包含表中的列时,使用算数运算符(如+、-、*、/、取反等)对结果进行运算时,会截断日期与时间函数返回值后再进行算数运算。
m_db=# CREATE TABLE t1(int_var int); CREATE TABLE m_db=# INSERT INTO t1 VALUES(100); INSERT 0 1 m_db=# SELECT (SELECT (1 * DATE_ADD('2020-10-20', interval int_var microsecond))) AS a FROM t1; -- 不进行截断处理。 a ---------------- 20201020000000 (1 row) m_db=# SELECT (1 * (SELECT DATE_ADD('2020-10-20', interval int_var microsecond))) AS a FROM t1; -- 进行截断处理。 a ------ 2020 (1 row) m_db=# SELECT 1 * a FROM (SELECT (SELECT 1 * DATE_ADD('2020-10-20', interval int_var microsecond)) AS a FROM t1) AS t2; -- 不进行截断处理。 1 * a ---------------- 20201020000000 (1 row) m_db=# SELECT 1 * a FROM (SELECT (SELECT DATE_ADD('2020-10-20', interval int_var microsecond)) AS a FROM t1) AS t2; -- 进行截断处理。 1 * a ------- 2020 (1 row)
函数名 |
与MySQL的差异 |
---|---|
ADDDATE() |
- |
ADDTIME() |
- |
CONVERT_TZ() |
- |
CURDATE() |
- |
CURRENT_DATE()/CURRENT_DATE |
- |
CURRENT_TIME()/CURRENT_TIME |
MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 |
CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP |
|
CURTIME() |
|
LOCALTIME()/LOCALTIME |
|
LOCALTIMESTAMP/LOCALTIMESTAMP() |
|
NOW() |
|
SYSDATE() |
|
UTC_TIME() |
|
UTC_TIMESTAMP() |
|
DATE() |
- |
DATE_ADD() |
- |
DATE_FORMAT() |
- |
DATE_SUB() |
- |
DATEDIFF() |
- |
DAY() |
- |
DAYNAME() |
- |
DAYOFMONTH() |
- |
DAYOFWEEK() |
- |
DAYOFYEAR() |
- |
EXTRACT() |
- |
FROM_DAYS() |
- |
FROM_UNIXTIME() |
- |
GET_FORMAT() |
- |
HOUR() |
- |
LAST_DAY() |
- |
MAKEDATE() |
- |
MAKETIME() |
- |
MICROSECOND() |
- |
MINUTE() |
- |
MONTH() |
- |
MONTHNAME() |
- |
PERIOD_ADD() |
MySQL8.0修复了以下问题,在以下场景中该函数的行为与MySQL8.0版本保持一致: |
PERIOD_DIFF() |
|
QUARTER() |
- |
SEC_TO_TIME() |
- |
SECOND() |
- |
STR_TO_DATE() |
- |
SUBDATE() |
- |
SUBTIME() |
- |
TIME() |
- |
TIME_FORMAT() |
- |
TIME_TO_SEC() |
- |
TIMEDIFF() |
- |
TIMESTAMP() |
- |
TIMESTAMPADD() |
- |
TIMESTAMPDIFF() |
- |
TO_DAYS() |
- |
TO_SECONDS() |
在MySQL 5.7版本中,此函数的精度信息有误。 开启精度传递参数下,GaussDB精度信息正常,和MySQL 8.0版本保持一致。 |
UNIX_TIMESTAMP() |
MySQL会根据入参是否存在小数位,决定返回定点型还是整型。当前GaussDB在内层嵌套操作符或函数时,返回的类型与MySQL可能存在不同。当内层节点返回定点、浮点、字符型、时间类型(不包括DATE类型)时,MySQL可能返回整型,GaussDB会返回定点型。 |
UTC_DATE() |
- |
WEEK() |
- |
WEEKDAY() |
- |
WEEKOFYEAR() |
- |
YEAR() |
- |
YEARWEEK() |
- |