如何在select语句中删除Status小于当前日期的Status = Pending

时间:2014-09-30 06:35:25

标签: sql tsql sybase

如何删除Status = Pending,其日期小于查询中的currentdate ...这应该是一个select语句

Status Date
Pending 9/5/2014  
Pending 9/30/2014
Complete 8/28/2014
Error 8/20/2014

3 个答案:

答案 0 :(得分:1)

由于您说您希望在当前日期之前删除Status为'Pending'的数据,因此我假设您要删除该数据。这是删除查询。

DELETE FROM my_table
WHERE status = 'Pending'
AND date < CAST(GETDATE() AS DATE);

但是,由于您提到需要select语句,因此这里是select查询,不包括Status在当前日期之前为'Pending'的记录。

SELECT status, date FROM my_table 
WHERE status <> 'Pending'
AND date < CAST(GETDATE() AS DATE)

(上述查询将错误地跳过Status为'Pending'的所有记录。)下一个查询应该完全符合预期。

SELECT status, date FROM my_table 
EXCEPT
SELECT status, date FROM my_table 
WHERE status = 'Pending'
AND date < CAST(GETDATE() AS DATE);

答案 1 :(得分:0)

您可以使用

SELECT status, date FROM Test 
WHERE status <> 'Pending'
AND date < CAST(GETDATE() AS DATE)

http://sqlfiddle.com/#!6/755f0/1

答案 2 :(得分:0)

尝试以下内容。我认为它应该做的工作。如果您只更改状态列,则以下内容应该有效。

    SELECT  CASE  WHEN date < CAST(GETDATE() AS DATE) and status ='Pending' 
    THEN 'YouNEwStatus' 
      ELSE
          status END AS status, date
      FROM  
            MYTable

如果你隐藏行。上面这位绅士提到的问题应该有效。

SELECT status, date FROM Test 
WHERE status <> 'Pending'
AND date < CAST(GETDATE() AS DATE)