You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle迁移PostgreSQL遇timestamp without time zone的TRUNC函数报错

解决PostgreSQL中function trunc(timestamp without time zone) does not exist报错

PostgreSQL没有Oracle中直接对timestamp类型生效的TRUNC()函数,Oracle的TRUNC(timestamp)作用是截断到日期(去除时分秒),在PostgreSQL里可以用以下两种等价方式替代:

方法1:直接转换为date类型

将timestamp字段和参数直接转为date类型,效果和Oracle的TRUNC完全一致:

EXECUTE 'SELECT COUNT(1) FROM BENMAST WHERE BENMAST_ENTITY_CODE = $1 AND
                        BENMAST_CUSTOMER_CODE = $2 AND BENMAST_CR_ON::date = $3::date'
      INTO W_BEN_ACT_COUNT
      USING P_ENTITY_CODE, P_CUST_CODE, SYSDATE;

方法2:使用date_trunc()函数

date_trunc('day', timestamp)会返回截断到当天零点的timestamp,和OracleTRUNC的逻辑匹配:

EXECUTE 'SELECT COUNT(1) FROM BENMAST WHERE BENMAST_ENTITY_CODE = $1 AND
                        BENMAST_CUSTOMER_CODE = $2 AND date_trunc(''day'', BENMAST_CR_ON) = date_trunc(''day'', $3)'
      INTO W_BEN_ACT_COUNT
      USING P_ENTITY_CODE, P_CUST_CODE, SYSDATE;

注意:动态SQL中的单引号需要用两个单引号转义。

另外,你尝试的clock_timestamp()、current_timestamp()只是获取当前时间的函数,和TRUNC函数不存在的问题无关,所以无法解决报错。

内容的提问来源于stack exchange,提问作者KSMNOP k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 17:36:15