问题描述
我正在寻找一种在 Postgres 和 sql Server 中为日期添加一天的方法,这样我就不必添加 if 条件来检查服务器正在运行的数据库
DATEADD(day,1,STOP_DATE)
在 Postgresql 中不起作用 &
STOP_DATE + 1
在 sql server 中不起作用
解决方法
总的来说,尝试使用 SQL Server 和 Postgres 上通用的语法编写 SQL 代码并不是一个好主意。您严重限制了自己,迟早会遇到运行速度过慢的查询,因为它不使用特定于某个 DBMS 的语法。
例如,通过您的方法,您人为地拒绝使用横向连接,因为它们的语法在 Postgres (LATERAL JOIN
) 和 SQL Server (CROSS/OUTER APPLY
) 中是不同的。
回到你的问题。
您可以将整数值添加到 Postgres 中的 date
值和 SQL Server 中的 datetime
值。
SQL Server
CREATE TABLE T(d datetime);
INSERT INTO T VALUES ('2020-01-01');
SELECT
d,d+1 AS NextDay
FROM T
http://sqlfiddle.com/#!18/d519d9/1
这将不适用于 SQL Server 中的 date
或 datetime2
数据类型,仅适用于 datetime
。
Postgres
CREATE TABLE T(d date);
INSERT INTO T VALUES ('2020-01-01');
SELECT
d,d+1 AS NextDay
FROM T
http://sqlfiddle.com/#!17/b9670/2
我不知道它是否适用于其他数据类型。
,在 PostgreSQL 中定义一个类似于 sql server 函数的函数。
编辑:
不能过去
在每个数据库系统上创建一个同名的函数,相应地增加一天。