2016-03-22 22 views
-6

I Spalte Wert sortiert werden soll (DateTime) auf einem Zustand (und Vorkommnis vor March 1st 2016 als 'Preseason',SQl CASE Statement

Ereignisse nach march 31st 2016 als 'PostSeason' Else 'Season' Auftretende. --query --- Select eventdate = Fall Wenn eventdate < '01 -03-2016' und dann 'Preseason' Wenn eventdate> '31 -03-2016' und dann 'nachsaison'
Else 'Season' End, Eventname Von tblEvent

--error Nachricht 'Msg 242, Die Umwandlung eines varchar-Datentypen auf einen Typen Datetime-Daten führte zu einem Out-of-Range-Wert.'

+2

Was hast du so versucht? –

+0

Dieser Fehler teilt mir mit, dass Ihre DateTime-Spalte Nicht-DateTime-Werte enthält. Sie könnten versuchen, es in Ihrer CASE-Anweisung CASTing, vielleicht? –

+0

Sie dachten nicht, dass das Posten der tatsächlichen Aussage von Wert wäre? – Paparazzi

Antwort

0

- Ok, war ein Problem mit dem Datumsformat. Ich habe ein europäisches Datumsformat (TT-MM-JJJJ) in meiner Abfrage verwendet, aber das System, das ich verwende, verwendet USA-Datumsformat (MM-TT-JJJJ), so dass meine Abfrage fehlgeschlagen ist. **

  • Lösung

** Select Besetzung (Fall Wenn eventdate < = '01/01/2016' und dann 'Preseason' Wenn eventdate> = '2016.12.31 'dann 'nachsaison'
Else 'Season' Ende als VARCHAR (25)), wie Jahreszeit, Eventname Von tblEvent

Dank für den Support !!!!

0

So etwas wie ..

ORDER BY 
    CASE 
    WHEN ISDATE(DateTime) = 1 THEN 
    CASE DateTime 
     WHEN <= '2016-03-01' THEN 1 -- Preseason 
     WHEN >= '2016-03-31' THEN 3 -- PostSeason 
     ELSE 2 END     -- Season 
    ELSE 4 END,      -- Not a date, figure out how to handle 
    DateTime 
+0

ok, danke für die Antwort und darauf, was ich wirklich sehen sollte, ist, wie man den Datentypkonflikt in der Case-Anweisung behandelt. –