2017-08-30 4 views
0

Je veux écrire SQL pour vérifier si un temps donné (par exemple 05:24 AM) dans le tableau A est dans l'une des tranches horaires irréguliers suivants dans le tableau B.SQL vérifier si le temps dans une série de timebands

5:00 AM to 6:00 AM 

7:30 AM to 9:15 AM 

1:26 PM to 2:45 PM 

4:00 PM to 4:59 PM 

10:00 PM to 11:14 PM 

Mon plan était d'écrire cette instruction SQL:

CASE 
    WHEN [Given Time] BETWEEN [START TIME] and [END TIME] THEN 1 
    ELSE 0 
END 

Mais je réalise que je dois écrire 5 Assemble - est-il une autre façon?

Sam

+1

pourquoi vous devez écrire 5 Assemble? Est-ce que les valeurs de la colonne réelle? – scsimon

+0

Oui, 5h00, 7h30, 13h26, 16h00, 22h00 sont dans une colonne (B. [START TIME]) et les heures de fin sont dans une autre colonne (B. [END TIME]) – Sam

Répondre

0

S'il vous plaît, essayez ceci:

CASE 
    WHEN EXISTS (SELECT 1 FROM [My Time Table] 
       WHERE [Given Time] BETWEEN [START TIME] and [END TIME]) 
    THEN 1 
    ELSE 0 
END 
0

je ne vois pas une raison unique pour une déclaration CASE ou JOIN. Cela devrait suffire.

DECLARE @YourTime time = '05:42' 

SELECT 
    * 
FROM 
    YourTable 
WHERE 
    @YourTime between [Start Time] and [End Time] 

Ou plus explicitement ...

... 
WHERE 
    [Start Time] <= @YourTime 
    AND [End Time] >= @YourTime 
+0

Merci - cela a fonctionné, mais j'avais besoin de l'instruction case pour créer le drapeau binaire - besoin de la jointure pour relier @YourTime dans le tableau A à l'heure de début/fin dans le tableau B – Sam

+0

Je suis confus @Sam mais si cela a fonctionné, alors vous n'avez pas besoin d'un cas ou d'une jointure. Cependant, vous n'avez pas posté de table B donc c'est difficile à dire. – scsimon