2009-08-18 18 views
1

Ich versuche, ein Datum in SQL zu vergleichen und ein neues Feld zu erstellen, damit ich die Ergebnisse nach heutigen Datum und anderen Datum (en) gruppieren kann. Ich konvertiere beide Daten in CHAR. Allerdings bekomme ich einen Ausdruck Fehler in der Nähe von = und) - Dies ist für einen SSRS-Bericht.TSQL - Case Date Vergleichen

Es gibt bereits eine ziemlich komplexe SQL-Anweisung, und ich versuche nur, diese zusätzliche Anweisung hinzuzufügen, um bei der Gruppierung zu helfen.

Hier ist ein Beispiel.

Kasten WHEN Convert (Char (8), FieldDate, 103) = Konvertieren (Char (8), GetDate(), 103) Then '0' tmpDate = '1' ELSE tmpDate = END

Diese

führt zu einer falschen sntax in der Nähe von '=' Dies führt zu einer falschen sntax nahe ')'

Dank

Antwort

3

Warum nicht die Daten direkt vergleichen?

CASE WHEN DATEDIFF(day, FieldDate, GETDATE()) = 0 THEN 1 ELSE 0 END AS tmpDate 
+0

Ich dachte daran, das zu tun, war mir aber nicht sicher, wie genau es das Datum aufgreifen würde. Aber bei einem schnellen Blick scheint es zu funktionieren. Ich war auf der Suche nach einem Rat, bevor ich das Datum ohne Zeit zurückbekam, und die Wege wiesen auf meine erste Methode oben hin. – Audioillity

+0

Die Verwendung von DATEDIFF, wie oben beschrieben, ist für den Vergleich von * zwei Daten in Ordnung. – LukeH

+0

Wenn Sie eigentlich nur das Datumselement als 'DATETIME' anstelle eines Strings ausgeben möchten, können Sie 'DATEADD (Tag, 0, DATEDIFF (Tag, 0, FeldDatum))' usw. verwenden, für die das Zeitelement gesetzt sein soll '00: 00: 00.000'. – LukeH

1

Wenn Ihr Beispiel ist aus dem Code (copy/paste): „Dann tmpDate -‚1 "" wird nicht funktionieren. Sie setzen einen Bindestrich anstelle eines Gleichheitszeichens?

+0

leid, das war ein Tippfehler, der Code auf einem System ohne Internetzugang. es wurde auf = nicht - jetzt oben festgelegt. – Audioillity

2

Bewegen Sie das Feld nach vorne:

select tmpDate = 
    CASE 
    WHEN Convert(Char(8), FieldDate, 103) = Convert(Char(8), GetDate(), 103) Then '1' 
    ELSE '0' END