云数据库 GAUSSDB-时间和日期处理函数和操作符:时间日期操作符
时间日期操作符
时间日期操作符如表1所示。
要尽量避免在查询中使用 'now'::date, 'now'::timestamp,'now'::timestamptz字符串常量强转以及text_date('now')的类似表达式来获取数据库当前时间或者将当前时间值作为函数入参场景,在这些场景下,优化器会提前算出常量时间,造成查询结果不正确。
gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b='now'::date; QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..13.60 rows=1 width=310) Filter: ((b)::text = '2024-11-09 15:07:56'::text) (2 rows) gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date('now'); QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..13.60 rows=1 width=310) Filter: ((b)::text = '2024-11-09'::text) (2 rows)
推荐使用now(), currenttimestamp()函数作为获取数据库当前时间的方法。
gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=now(); QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..14.80 rows=1 width=310) Filter: ((b)::text = (now())::text) (2 rows) gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date(now()); QUERY PLAN ---------------------------------------------------------- Seq Scan on t1 (cost=0.00..16.00 rows=1 width=310) Filter: ((b)::text = (text_date((now())::text))::text) (2 rows)
用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。
比如下面示例没有明确数据类型就会出现异常错误。
1 2 3 4 5 6 7 |
gaussdb=# SELECT date '2001-10-01' - '7' AS RESULT; ERROR: GAUSS-10416: invalid input syntax for type timestamp: "7" SQLSTATE: 22007 LINE 1: SELECT date '2001-10-01' - '7' AS RESULT; ^ CONTEXT: referenced column: result |
- 华为数据库日期函数_GaussDB安装_高斯数据库日期函数
- GaussDB数据库函数和字符串_高斯数据库优势_新建高斯数据库_高斯协议
- GaussDB数据库函数_GaussDB函数和操作符_高斯数据库函数-华为云
- GaussDB获取时间_gaussdb for MySQL_高斯数据库获取时间_华为云
- GaussDB求日期差_GaussDB数据类型_高斯数据库求日期差-华为云
- 如何创建定时压测_性能测试服务_定时压测-华为云
- GaussDB设置默认值_GaussDB存储过程_高斯数据库设置默认值-华为云
- 域名备案需要多少时间
- GaussDB培训_GaussDB教程_高斯数据库培训-华为云
- PostgreSQL_云数据库RDS for PostgreSQL_华为云