DELETE函数中的两个单独的WHERE子句

问题描述 投票:0回答:2

我想对在当月的第一天和该月的最后一天之间进行的某些交易执行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)
        )
sql sql-server
2个回答
0
投票

你可以使用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)

0
投票

试试这个:

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
© www.soinside.com 2019 - 2024. All rights reserved.