云数据库 GAUSSDB-日期和时间函数
日期和时间函数
以下为 GaussDB M-Compatibility兼容性日期时间函数公共说明。
- 《M-Compatibility开发指南》中“函数和操作符”章节函数入参为时间类型表达式的情况:
时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。
生效的情况根据函数有所不同,比如:DATEDIFF函数由于只计算日期的差值,所以时间表达式会当做日期来解析。TIMESTAMPDIFF函数由于计算时间差值时是根据UNIT来决定的,所以会根据UNIT选择将时间表达式当做DATE或者TIME或者DATETIME来解析。
- 当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)
- 函数入参为无效日期的情况:
一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。
大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。
新框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示:
- 华为数据库日期函数_GaussDB安装_高斯数据库日期函数
- GaussDB求日期差_GaussDB数据类型_高斯数据库求日期差-华为云
- GaussDB数据库函数_GaussDB函数和操作符_高斯数据库函数-华为云
- GaussDB数据库函数和字符串_高斯数据库优势_新建高斯数据库_高斯协议
- GaussDB获取时间_gaussdb for MySQL_高斯数据库获取时间_华为云
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云
- GaussDB设置默认值_GaussDB存储过程_高斯数据库设置默认值-华为云
- GaussDB考试_GaussDB数据库考试_高斯数据库考试_华为云
- 域名备案需要多少时间
- GaussDB备份方式_高斯积分公式_高斯数据库备份方式_华为云