我想对在当月的第一天和该月的最后一天之间进行的某些交易执行DELETION。只有在FileUploadDate到达该月的最后一天时才能进行删除过程。换句话说,当FileUploadDate与该月的最后一天相等时。这里的主要问题是当WHERE子句的第一个条件为TRUE时,第二个条件是“Filtered”,其中包含来自第一个条件的值,这使得它无关紧要。我尝试使用其他方法,例如CASE-WHEN-THEN,但是我在将CASET子句中的DELETE集成时遇到了问题(如果可能的话)。有没有办法执行两个单独的条件,而没有一个影响另一个?谢谢。
DELETE
FROM transacions
WHERE EXISTS
(
SELECT
*
FROM transacions
WHERE fileuploaddate = CONVERT( date, dateadd(d, -2, dateadd(m, datediff(m, 0, getdate()) + 1, 0)),103)
AND fileuploaddate BETWEEN CONVERT(date, dateadd(month, datediff(month, 0, getdate()), 0))
AND CONVERT(date, dateadd(d, -1, dateadd(m, datediff(m, 0, getdate()) + 1, 0)),103)
)
你可以使用OR
而不是AND
WHERE FileUploadDate = CONVERT(DATE, DATEADD(d, -2, DATEADD(m, DATEDIFF(m, 0, GETDATE()) + 1, 0)),103)
OR FileUploadDate BETWEEN CONVERT(DATE, DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)) AND CONVERT(DATE, DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, GETDATE()) + 1, 0)),103)
试试这个:
DELETE
FROM Transactions
WHERE EOMONTH (FileUploadDate) = DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) -- delete on the last day of the month
AND FileUploadDate >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) -- delete files from the begining of the month
AND FileUploadDate <= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) -- delete files to the end of the current montn