我正在尝试将两段SQL Server代码重写为PostgreSQL。
第一个是:
WHERE
(DATEADD(S, Submit_Date, '1970-01-01')) >= DATEADD(d, -3, GETDATE())
OR
(DATEADD(S, Last_Changed_Date, '1970-01-01')) >= DATEADD(d, -3, GETDATE())
字符串
在DATEADD
之后,我一直收到一个关于S的错误。
第二个是这样的:
WHERE (dbo.Test.[Log] LIKE '%%Status: Closed%%')
GROUP BY dbo.PYR.ID_Number
型
我需要帮助提到的SQL Server代码行修改PostreSQL。
有什么建议他们应该怎么做吗?
- 谢谢-谢谢
2条答案
按热度按时间axr492tv1#
字符串
vxf3dgd42#
如果
submit_date
和Last_Changed_date
都有索引,那么下面的查询可能比最初的第一个查询执行得更好:字符串
避免对
WHERE
子句中的列进行操作,以便条件为 sargable(SearchARGumentABLE);即,如果顺序地阅读整个表,则数据库引擎能够在索引可用时扫描索引。为了可读性,我选择使用
- interval '3 days'
而不是+ interval '-3 days'
。减去一个音程而不是加上一个负音程对读者的认知负荷更小,特别是当-
被埋在一个与+
有一定距离的字符串中时。第二个查询可以重写如下:
型
虽然
dbo.Test."Log"
也用作列引用,但最好只在FROM
子句的表引用中包含模式,因为这样可以最大限度地减少在模式更改时必须对查询进行的更改数量。如果这是一个频繁的查询条件,并且是一个大表,那么探索索引
Test."Log"
的选项。