PostgreSQL使用time字段生成tsrange更新表时语法报错求助
PostgreSQL timerange字段更新语法错误解决办法
问题场景
你的PostgreSQL表包含两个time without time zone类型字段F1、F2,新增timerange类型的calde字段后,执行update Table1 set timerange=[F1,F2]时触发语法错误:
ERROR: syntax error at or near "["
错误原因
PostgreSQL不支持直接用[F1,F2]这种语法创建范围类型,范围类型需要通过构造函数或规范字面量生成。
正确解决方案
推荐两种可行写法,优先使用构造函数方案:
方案1:使用timerange构造函数(推荐)
直接调用timerange()构造函数传入起始、结束时间,还可指定边界规则(默认左闭右开[)):
-- 默认左闭右开 UPDATE Table1 SET calde = timerange(F1, F2); -- 自定义边界(比如左右都闭合) UPDATE Table1 SET calde = timerange(F1, F2, '[]');
方案2:使用范围字面量
通过字符串拼接生成符合格式的范围字面量,再强制转换为timerange类型:
UPDATE Table1 SET calde = ('[' || F1 || ',' || F2 || ')')::timerange;
内容的提问来源于stack exchange,提问作者Lamia Mniena
相关产品推荐
相关产品推荐

