【问题标题】:Remove data using datetime使用日期时间删除数据
【发布时间】:2016-09-16 13:21:18
【问题描述】:

目标:
使用变量 @remove from dateTbl 删除表 Datees 中的数据

结果应该是

'2016-01-1 00:00:00.000'  
'2016-01-4 00:00:00.000'  
'2016-01-5 00:00:00.000'

在日期表中。

是数据

'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

【问题讨论】:

  • 您在发布易于使用的数据方面做得很好。但是,我不明白您要做什么。
  • Aaaa 想要的结果是?
  • 删除dateid所在的日期(从@remove中选择dateid)?
  • 可能你的问题不清楚
  • 我已经更新了我的消息

标签: sql sql-server tsql datetime


【解决方案1】:

您可以使用这样的查询:

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

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

【讨论】:

  • 不知道为什么在这里投反对票。这似乎是对 OP 正在寻找什么的一个很好的猜测。
  • Plus1 这是正确的答案,即使在多次阅读问题后也是如此
  • 谢谢你们的帮助!
  • 其实 OP 具​​有误导性。您将如何在结果中获得 2016-01-04 并删除 2016-01-02?应该是笔误。
【解决方案2】:

你在尝试这个吗:

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

【讨论】:

  • 无法理解那些无缘无故投反对票的人。可能他们这样做只是因为他们不明白;)
【解决方案3】:

你的意思应该是这样的:

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 值,如果这些值也有时间部分,则可能不太容易。然后,您可以利用转换或转换为字符串值进行比较。如果您有这样的需求,请提供更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 2021-03-19
    • 2017-04-23
    • 2015-10-13
    • 1970-01-01
    • 2016-04-09
    • 2018-05-08
    相关资源
    最近更新 更多