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

Oracle转PostgreSQL:计算OTP过期时间clock_timestamp运算符报错

Oracle转PostgreSQL:OTP过期时间计算报错解决

错误原因

PostgreSQL对日期时间运算的类型校验更严格,不支持timestamp with time zone(即timestamptz类型,clock_timestamp()返回值类型)直接与整数相加。而Oracle中允许直接将整数与日期相加,默认把整数当作天数处理,这是两者语法差异导致的报错。

修正方案

根据原代码中W_OTP_EXPIRY / 1440的逻辑(1440为一天的分钟数,推测W_OTP_EXPIRY是分钟数,需转为天数),提供两种PostgreSQL兼容写法:

方案1:用INTERVAL语法显式指定时间单位

W_EXPIRY := clock_timestamp() + (W_OTP_EXPIRY / 1440) * INTERVAL '1 day';

如果想直接按分钟计算(跳过天数转换,更直观),可以写成:

W_EXPIRY := clock_timestamp() + W_OTP_EXPIRY * INTERVAL '1 minute';

方案2:用make_interval函数(可读性更强)

按天数计算:

W_EXPIRY := clock_timestamp() + make_interval(days => W_OTP_EXPIRY / 1440);

按分钟计算:

W_EXPIRY := clock_timestamp() + make_interval(mins => W_OTP_EXPIRY);

注意

选择哪种写法取决于W_OTP_EXPIRY的实际业务含义:如果它代表OTP的有效分钟数,直接用分钟间隔的写法能避免除法带来的精度损失;如果原本逻辑就是要转换为天数,则选用天数相关写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:48:21