2016-08-31 2 views
0

Ich bin auf der Suche nach einer Case-Anweisung, so dass,
Wenn die aktuelle Zeit vor 11 Uhr ist, möchte ich die Informationen von gestern sowie heute.
Wenn die Zeit nach 11 Uhr ist, möchte ich nur die Informationen von heute.Where Anweisung mit Case basierend auf der aktuellen Zeit

Hier ist, was ich jetzt

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 

Und .... (zusätzliche Anforderungen, die arbeiten)

Antwort

0

Wenn ich Ihr Problem richtig verstanden habe, ist folgendes Sie haben:

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) 

Ich legte die [InitiateDt] in der Nähe von WHERE Klausel.

0

versuchen diese

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 
+0

Vielen Dank! Scheint zu arbeiten. Aufgeregt, um morgen voll zu testen. – Peter

0

Try this:

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) 

Die oben gibt alle Daten der heutigen wie auch gestern vor 11:00 Uhr.

Verwandte Themen