如何将两段SQL Server代码改写为PostgreSQL?
SQL Server 转 PostgreSQL 代码修改方案
第一段:时间条件查询的修改
原SQL Server代码中DATEADD(S, ...)的写法在PostgreSQL中不被支持,同时时间函数也有差异,修改后的代码如下:
WHERE ('1970-01-01'::timestamp + Submit_Date * interval '1 second') >= CURRENT_TIMESTAMP - interval '3 days' OR ('1970-01-01'::timestamp + Last_Changed_Date * interval '1 second') >= CURRENT_TIMESTAMP - interval '3 days'
关键调整点:
- PostgreSQL没有
DATEADD的缩写参数(如S代表秒),需用interval '1 second'的形式定义时间间隔 - SQL Server的
GETDATE()替换为PostgreSQL标准函数CURRENT_TIMESTAMP(或NOW(),前者更符合SQL标准) - 秒级时间戳转日期需通过起始时间
'1970-01-01'::timestamp加上对应秒数的interval实现
第二段:模糊查询与分组的修改
原代码涉及标识符引用和模糊查询语法的差异,修改后的代码如下:
WHERE "test"."Log" LIKE '%Status: Closed%' GROUP BY "pyr"."ID_Number"
关键调整点:
- PostgreSQL使用双引号包裹区分大小写的表/字段名(如果原对象名是大小写混合的,必须保留双引号;若为全小写可省略)
- SQL Server的
dbo是默认模式,PostgreSQL默认模式为public,若你的表实际在dbo模式下,需写成"dbo"."test"."Log" - 模糊查询的通配符
%无需重复,单个%即可匹配任意长度字符(原SQL Server中的%%是冗余写法)
内容的提问来源于stack exchange,提问作者Emma V
相关产品推荐
相关产品推荐

