Oracle转PostgreSQL:SYSDATE时间计算等效实现求助
解决PostgreSQL中时间计算丢失时分秒的问题
问题根源
PostgreSQL的CURRENT_DATE仅返回当前日期部分(时分秒固定为00:00:00),而Oracle的SYSDATE是包含当前完整时间戳(时分秒)的,这导致你原语句计算后丢失了时间精度。
替代方案
使用CURRENT_TIMESTAMP(或等效的NOW())替代CURRENT_DATE,它会返回包含时分秒的完整当前时间戳,再结合PostgreSQL的时间间隔运算来实现和Oracle一致的效果:
写法1:直接换算为小时间隔
SELECT CURRENT_TIMESTAMP - ( SELECT to_number(config_value) * INTERVAL '1 hour' FROM tvam_configs WHERE config_key = 'TVAM_WIRELESS_PRICING' );
写法2:通过天数除法换算
SELECT CURRENT_TIMESTAMP - ( SELECT to_number(config_value) / 24 FROM tvam_configs WHERE config_key = 'TVAM_WIRELESS_PRICING' )::INTERVAL '1 day';
用于过滤timestamp字段的示例
将上述计算结果用于过滤last_modified字段:
SELECT * FROM your_target_table WHERE last_modified >= ( SELECT CURRENT_TIMESTAMP - to_number(config_value) * INTERVAL '1 hour' FROM tvam_configs WHERE config_key = 'TVAM_WIRELESS_PRICING' );
内容的提问来源于stack exchange,提问作者vana
相关产品推荐
相关产品推荐

