【问题标题】:Tsql datetime set except operationtsql日期时间设置除操作
【发布时间】:2012-11-15 17:03:48
【问题描述】:

我有一个包含日期时间对的“检测到的存在”表和一个包含日期时间对的“预期存在”表... 我想知道我什么时候期望存在但没有...我认为这是与日期时间设置的差异(在 tsql 中,除了操作数),但我不知道如何用 sql 解决。

如果我不清楚的例子:

    CREATE TABLE [dbo].[DetectedPresence](
        [entrance] [datetime] NULL,
        [exit] [datetime] NULL
    )

    CREATE TABLE [dbo].[ExpectedPresence](
        [entrance] [datetime] NULL,
        [exit] [datetime] NULL
    )

INSERT INTO ExpectedPresence VALUES ('2012-11-16 08.15','2012-11-16 12.00')
INSERT INTO ExpectedPresence VALUES ('2012-11-16 17.00','2012-11-16 18.00')
INSERT INTO DetectedPresence VALUES ('2012-11-16 08.00','2012-11-16 12.00')
INSERT INTO DetectedPresence VALUES ('2012-11-16 15.00','2012-11-16 18.00')

预期存在值:

entrance               exit
2012-11-16 08.00       2012-11-16 12.00
2012-11-16 15.00       2012-11-16 18.00

DetectedPresence 值:

entrance               exit
2012-11-16 08.15       2012-11-16 12.00
2012-11-16 15.00       2012-11-16 17.00

我想设置日期时间差异(间隙):

2012-11-16 08.00       2012-11-16 08.15
2012-11-16 17.00       2012-11-16 18.00

你能帮帮我吗?谢谢。

【问题讨论】:

  • 您显示的值不是datetime 值,因此不清楚您真正要问的是什么。我建议您发布一个小的、独立的示例,包括设置一些测试数据所需的CREATE TABLEINSERT 语句,以及您期望得到的结果。
  • 我编辑我的问题,谢谢。

标签: sql-server tsql datetime set-difference


【解决方案1】:

类似的东西

case when detectedStart > expectedStart then 
   expectedStart + '-' + detectedStart 
else null end as startDiff,
case when detectedEnd < expectedEnd then 
   detectedEnd + '-' + expectedEnd 
else null end as endDiff

    insert into difference (expectedStart, detectedStart)
    Select
        expectedStart,detectedStart 
    from 
        ExpectedPresence e inner join
        DetectedPresence d on
        e.staffID = d.staffID
    where
       detectedStart > expectedStart;

    insert into difference (expectedEnd, detectedEnd)
    Select  
        expectedEnd,detectedEnd 
    from 
        ExpectedPresence e inner join
        DetectedPresence d on
        e.staffID = d.staffID
    where
        detectedEnd < expectedEnd

【讨论】:

  • 我不确定这是不是解决方案...我需要一个日期时间间隔表作为结果。
猜你喜欢
  • 2013-06-06
  • 2010-10-23
  • 1970-01-01
  • 2012-05-14
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多