0

我正在尝试将以下 oracle 查询转换为 SQL 服务器查询。

Select * from table A
WHERE  TRUNC(a.Generate_DATE,'MM') = (SELECT (NVL (TRUNC (TO_DATE ('$$date','MM/DD/YYYY HH24:MI:SS')),TRUNC(ADD_MONTHS(SYSDATE, -1),'MM'))) FROM DUAL)

其中 $$date 是参数值,将从查询外部传递。

问题出在日期格式上。我无法在 sql server 中转换这种确切的格式。

4

1 回答 1

0

要获得该月的第一天,请使用dateaddand day,例如

declare @d date = getdate()
select dateadd(day,  1-day(@d), @d)

用于NVL使用标准合并功能。

TRUNC使用cast(getdate() as date)

ADD_MONTHS(SYSDATE, -1)使用dateadd(month,-1,getdate())

或者去获取SQL Server Migration Assistant for Oracle,它将为您将 Oracle SQL 和 PL/SQL 转换为 TSQL。它还安装了一堆兼容性功能,因此使用 SSMA 将其转换为:

WHERE ssma_oracle.trunc_date2(A.END_DATE, 'MM') = 
   (
      SELECT isnull(ssma_oracle.trunc_date(ssma_oracle.to_date2('12/01/2020 18:15:00', 'MM/DD/YYYY HH24:MI:SS')), ssma_oracle.trunc_date2(dateadd(m, -1, sysdatetime()), 'MM')) AS expr
   )
于 2021-02-16T15:33:58.770 回答