使用来自 Teradata SQL 的 TRUNC、ADD_MONTHS、LAST_DAY 修改查询以便在 SQL 服务器上工作?

Modify query with TRUNC, ADD_MONTHS, LAST_DAY from Teradata SQL so as to work on SQL Server?

我有来自 Teradata SQL 的代码行,如下所示:

WHERE CAST(COL1 AS DATE) BETWEEN TRUNC(ADD_MONTHS(CURRENT_DATE, -6),'MM') AND LAST_DAY(ADD_MONTHS(CURRENT_DATE,-1))

我的问题是如何修改上面的代码行以便在 SQL 服务器中也能正常工作?

您可以使用 EOMONTH 获取当月的最后一天 (DATE)。 然后用DATEADD加上1天,得到下个月的第一天。
然后从中减去几个月。

select 
DATEADD(month, -7, DATEADD(day, 1, EOMONTH(GETDATE()))) as date1, 
DATEADD(month, -1, DATEADD(day, 1, EOMONTH(GETDATE()))) as date2
date1 date2
2021-07-01 2022-01-01

那么等效的 WHERE 子句是这样的:

WHERE COL1 >= DATEADD(month, -7, DATEADD(day, 1, EOMONTH(GETDATE())))
  AND COL1  < DATEADD(month, -1, DATEADD(day, 1, EOMONTH(GETDATE())))