2012-06-16 4 views
0

Comment peut en vérifier si le calendrier existe entre l'intervalle de temps donné dans SQL plus clairement underatandComment comparer un temps pour un calendrier de donner entre le temps de - temps

Select * 
From [Client].[scheduler] 
Where [Scheduler_Date] = '6/16/2012' 
    and ([start]<='13:06 ') 
    and ([end]>='14:31 ') 
+0

Alors, quel est le problème avec votre requête? – praveen

+0

Je ne pense pas que vous pouvez appliquer l'opérateur '> =' ou '<=' sur des valeurs de chaîne placées entre guillemets comme ''11: 00'' – yogi

+0

Vous pouvez utiliser l'opérateur <> avec des valeurs de chaîne par exemple WHERE CONVERT (VARCHAR , timeColumn, 108)> = '01: 01: 01 'mais le meilleur moyen est Entre opérateur – praveen

Répondre

0

Essayez cette

select * 
from [Client].[scheduler] 
where [Scheduler_Date] = '6/16/2012' and 
     (CONVERT(VARCHAR(5),[time_from],108) LIKE '11%') and 
     (CONVERT(VARCHAR(5),[time_to],108) LIKE '13:06%') 
1

Je vous suggère d'éviter les chaînes et en utilisant le time type de données:

select * from [Client].[scheduler] 
where [Scheduler_Date] = '20120616' and 
     (CONVERT(time,[time_from])>='11:00') and 
     (CONVERT(time,[time_to])<='13:06') 

(Pourquoi time_from et time_to pas déjà time s?)

J'ai également ajusté la chaîne de date littérale d'utiliser un format sûr (aaaammjj)


D'autre part, il me semble que vous pourriez vouloir trouver des horaires qui se chevauchent (partiellement ou entièrement) avec les points finaux donnés. L'astuce, il est de changer les comparaisons:

where [Scheduler_Date] = '20120616' and 
     (CONVERT(time,[time_from])<='13:06') and 
     (CONVERT(time,[time_to])>='11:00') 

Cette nouvelle clause WHERE trouverez toutes les lignes qui se chevauchent 11: 00-13: 06 période de temps, pas seulement ceux qui sont entièrement à l'intérieur.

Questions connexes