日期与时间函数
以下为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() | - |