2016-09-16 58 views
0

目标删除数据:
通过使用可变@Remove从dateTbl使用日期时间

删除表中的Datees数据结果应该是

'2016-01-1 00:00:00.000' 
'2016-01-4 00:00:00.000' 
'2016-01-5 00:00:00.000' 
在表Datees

它是数据

'2016-01-3 00:00:00.000' 
'2016-01-5 00:00:00.000' 

这应去除

问题:
我不能当你有数据为日期找到相应的解决方案这一背景下。

信息:
变量@Remove的内容可以是不同的

CREATE TYPE dateTbl AS TABLE 
( 
    dateID datetime 
); 


CREATE TABLE Datees 
(
    dateID datetime 
); 

INSERT INTO Datees 
VALUES 
('2016-01-1 00:00:00.000'), 
('2016-01-2 00:00:00.000'), 
('2016-01-3 00:00:00.000'), 
('2016-01-4 00:00:00.000'), 
('2016-01-5 00:00:00.000') 

//------------------------ 

DECLARE @remove as dateTbl 

INSERT INTO @remove 
VALUES 
('2016-01-3 00:00:00.000'), 
('2016-01-4 00:00:00.000') 

select a.* 
from @remove a 
+1

你做了一个很好的工作发布易于消费的数据。但是,我不明白你在做什么。 –

+1

Aaaaand所需的结果是? – Lamak

+0

删除dates where dateid in(select dateid from @remove) ? –

回答

3

您可以使用这样的查询:

DELETE d 
FROM Datees AS d 
JOIN @remove AS t ON d.dateID = t.dateID 

上面的查询将表Datees所有匹配的删除记录在表变量@remove中。

+0

不知道为什么downvote在这里。这似乎是OP在寻找什么的一个很好的猜测。 –

+0

Plus1这是正确的答案,即使经过多次阅读的问题 –

+0

谢谢你们的帮助! –

0

你们是不是这样的:

delete datees where dateid in (select dateid from @remove) 
+0

不可能理解那些没有任何理由而倒下的人。也许他们这样做只是因为他们不明白;) –

+0

是的,你是正确的 –

0

也许这是你的意思:

DECLARE @Datees TABLE (dateID DATETIME); 

INSERT INTO @Datees 
VALUES ('2016-01-1 00:00:00.000'), 
     ('2016-01-2 00:00:00.000'), 
     ('2016-01-3 00:00:00.000'), 
     ('2016-01-4 00:00:00.000'), 
     ('2016-01-5 00:00:00.000'); 

------------------------ 

DECLARE @remove AS TABLE (dateID DATETIME); 

INSERT INTO @remove 
VALUES ('2016-01-3 00:00:00.000'), 
     ('2016-01-4 00:00:00.000'); 

SELECT * 
FROM @Datees d 
WHERE NOT EXISTS (SELECT * 
        FROM @remove r 
        WHERE r.dateID = d.dateID); 

对于去除:

delete 
    FROM @Datees 
    WHERE EXISTS (SELECT * 
         FROM @remove r 
         WHERE r.dateID = [@datees].dateID); 
与DateTime值

但是,它可能不是很如果值也有时间部分,则很容易。然后,您可以使用转换或转换为字符串值进行比较。如果你有这样的需求,然后提供更多的信息。

相关问题