2010-12-13 2 views
2

Ich habe zwei Felder (Starttime und EndTime) beide varchar Feld sind (es erstellt wurde, bevor ich anfing) zwischen demMit SQL Zeitarbeits

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'} 

Ich erstelle eine Abfrage nur Datensätze, wo aktuelle Zeit Start- und Endzeit

zum Beispiel, wenn die Startzeit 1 Uhr und die Endzeit 21 Uhr ist. Und die Zeit ist jetzt 11 Uhr, es würde diesen Rekord bekommen.

Ich bin nicht sicher, wie es mit Varchar-Felder zu tun.

Danke.

Antwort

3

Wenn würde nur funktionieren, wenn es alles in der gleichen Format und 24 Stunden Zeit ist. Wie pro ASCII-Codes ...

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

Wenn Sie hh:mm:ss speichern nicht {t 'hh:mm:ss'}

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

Keine Notwendigkeit, Zeit CAST etc, wenn Sie mit Legacy-Code/Daten stecken ...

bearbeiten, wie pro Kommentar

Wenn Sie extrahieren werfen wollen, dann die realen Daten aus dem Flaum

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

Bitte erklären Sie uns, wie Sie konvertieren/warf einen Datetime in eine Zeichenfolge dieses Formats –

+0

Ich landete Verwenden Sie Ihr Beispiel {t '08: 00: 00 '} <= {t '11: 00: 00'} <= {t '19: 00: 00'}. –

0

Es gibt einen anderen Weg, dies zu tun, werde ich Beispielabfrage here.Hope schreiben es hilft

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'