2010-12-13 27 views
2

J'ai deux champs (STARTTIME et EndTime) les deux sont VARCHAR (Il a été créé avant que je commence)Travailler avec le temps de SQL

Start Time  End time 
{t '01:00:00'} {t '21:30:00'} 
{t '01:30:00'} {t '09:00:00'} 
{t '07:00:00'} {t '11:30:00'} 
{t '08:00:00'} {t '19:00:00'} 
{t '07:00:00'} {t '11:00:00'} 

Je crée une requête seulement obtenir des enregistrements où l'heure est entre la heure de début et de fin.

par exemple si le temps de démarrage est 1h du matin et l'heure de fin est 21 heures. Et le moment est maintenant 11h, il obtiendrait ce record.

Je ne sais pas comment le faire avec les champs varchar.

Merci.

Répondre

3

Si seulement travaillerait si tout est dans le même format et 24 heures. Comme par codes ASCII ...

{t '08:00:00'} <= {t '11:00:00'} <= {t '19:00:00'} 

Si vous stockez hh:mm:ss pas {t 'hh:mm:ss'}

08:00:00 <= 11:00:00 <= 19:00:00 

Pas besoin de CAST en temps etc si vous êtes coincé avec le code héritage/données ...

Modifier, comme par commentaire

Si vous souhaitez lancer puis extraire les données réelles à partir du duvet

CAST(SUBSTRING('{t ''01:00:00''}', 5, 8) AS time) 
--OR 
CAST('01:00:00' AS time) 
+0

S'il vous plaît nous dire, comment vous convertissez/cast un datetime à une chaîne de ce format –

+0

J'ai fini en utilisant votre {t '08: 00: 00 '} <= {t '11: 00: 00'} <= {t '19: 00: 00 '} exemple. –

0

Il une autre façon de le faire, je vais écrire échantillon here.Hope de requête il aide

SELECT * from TableName 
WHERE right(CONVERT(datetime,starttime,103),7) = '01:00AM' and 
     right(CONVERT(datetime,endtime,103),7) = '09:00PM' and 
     right(CONVERT(datetime,getdate(),103),7) = '11:00AM'