使用来自 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())))
我有来自 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())))