基于当前时间的案例陈述

时间:2016-08-31 04:46:53

标签: sql-server sql-server-2008 case

我希望创建一个Case语句,以便, 如果当前时间早于上午11点,我想要昨天和今天的信息 如果时间是在上午11点之后,我只想要今天的信息。

这就是我现在所拥有的

FROM [EDC].[dbo].[DIM_DefectData] with (NoLock)
Where
Case
    When datepart(hh, GetDate()) < 11 then
        [InitiateDt] > DATEADD(day, DATEDIFF(day, 0, GETDATE()),-1)
    Else
        [InitiateDt] > DATEADD(day, DATEDIFF(day, 0, GETDATE()),0)
End

......(其他要求正在发挥作用)

3 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您需要以下内容:

FROM [EDC].[dbo].[DIM_DefectData] WITH (NOLOCK)
WHERE [InitiateDt] > ( 
    CASE
    WHEN DATEPART(HH, GETDATE()) < 11 
    THEN DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), -1)
    ELSE DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0)
    END )

我将[InitiateDt]放在WHERE子句附近。

答案 1 :(得分:0)

试试这个

select * from yourTable   
        where [InitiateDt] > Case When datepart(hh,getdate()) <11
                             Then dateadd(day,datediff(day,0,getdate()),-1)
                             Else dateadd(day,datediff(day,0,getdate()),0)
                             END

答案 2 :(得分:0)

试试这个:

DECLARE @t table(d datetime)

insert @t values
('2016-08-30 09:00'),
('2016-08-30 10:00'),
('2016-08-31 10:00'),
('2016-08-30 11:00'),
('2016-08-30 11:08')

if(DATEPART(HH, GETDATE()) < 11)
SELECT CAST(d AS TIME) FROM @t
WHERE CAST(d AS TIME) <= CAST('11:00' AS TIME)
ELSE
SELECT CAST(d AS TIME) FROM @t
WHERE CAST(d AS TIME) > CAST('11:00' AS TIME)

上述内容在昨天上午11:00之前返回所有今天的数据。