1

我试图搜索这个类似问题的问题历史,但找不到任何与我想要做的事情相匹配的东西。希望有人可以提供帮助。我有一个表,其中包含一些存档数据,其时间戳可追溯到 1900 年 1 月 1 日。不知道那个日期是怎么来的,我认为它可能是基于一些旧应用程序的时间戳。无论如何,我的公司需要在这些存档表中保留的数据是好的、有效的数据。然而,为了定期清理数据,我们希望能够清除日期早于 60 天的数据,但不接触具有 1900 年旧时间戳的数据。有没有办法可以使用介于语法来完成这个?我在想我可以做这样的事情,但可能过于简单化了:

--example: --Query 查找超过 60 天的记录并转储到临时表中

select transid into #cdm_delete_table from cdmtrans where exporttime < getdate()-60

--然后将这些记录保存在我的临时表中,从主表中执行删除。--但这会像您期望的那样摆脱所有记录

delete from cdmtrans where transid in (select transid from #cdm_delete_table)

--但是,我想根据日期范围进行删除。-- 早于 60 天,但大于 1900 年 1 月 1 日。这行得通吗??

delete FROM cdmtrans WHERE transid BETWEEN '01/01/1901' and getdate()-60 

或者

delete from cdmtrans where transid in 
(select transid from #cdm_delete_table WHERE transid BETWEEN '01/01/1901' and getdate()-60)

这就是我迷路的地方。如果我走在正确的轨道上,希望有人可以为我澄清。提前谢谢。

4

3 回答 3

0

此查询应该为您提供所需的内容:

DELETE FROM cdmtrans
WHERE exporttime < getdate() -60
AND exporttime <> '1900-01-01'
于 2013-07-05T18:47:19.627 回答
0

你肯定在正确的轨道上。我认为您正在寻找这样的查询:

DELETE FROM cdmtrans
WHERE exporttime > '19010101'
AND exporttime < getdate() - 60;

(请注意,您不需要transid在查询中删除正确的记录。)

如果您想检查这是否为您提供了正确的设置删除,请先进行SELECT查询,如下所示:

SELECT *
FROM cdmtrans
WHERE exporttime > '19010101'
AND exporttime < getdate() - 60;
于 2013-07-05T18:48:00.127 回答
0

比较AND器可以成为你的朋友。使用它来选择不相等'01/01/1901'且超过 60 天的记录。

-- select all records older than 60 days and are not '1/1/1900' into temp table
SELECT  transid
INTO    #cdm_delete_table
FROM    cdmtrans
WHERE   exporttime < DATEDIFF(dd, GETDATE(), 60)
        AND exporttime != '01/01/1901'

-- remove from main table
DELETE
FROM    cdmtrans
WHERE   transid IN (
            SELECT  transid
            FROM    #cdm_delete_table
        )

-- or skip the temp table and do it in one query
DELETE
FROM    cdmtrans
WHERE   exporttime < DATEDIFF(dd, GETDATE(), 60)
        AND exporttime != '01/01/1901'
于 2013-07-05T18:54:17.890 回答