2016-08-18 5 views
0

Ich habe in der "in" -Anweisung die Daten enthalten, die in logdate enthalten sind.Wie konvertiere ich diese Datumszeichenfolge in datetime?

aus irgendeinem Grund kann ich sie nicht konvertieren. Ich bin eher daran gewöhnt, Datenbanken zu orakrieren, die diese Dinge mehr auf vergebungsvolle Weise behandeln. Ich kämpfe darum, herauszufinden, was falsch läuft.

select CONVERT(DATETIME,opencall.logdate,102) 
    from opencall 
    where logdate in 
    ( '17/08/2016 10:33:08' 
    ,'17/08/2016 10:33:13' 
    ,'17/08/2016 10:33:17' 
    ,'17/08/2016 10:34:03' 
    ,'17/08/2016 10:34:14' 
    ,'17/08/2016 10:34:46') 
    ; 

I erhalten, um den Fehler [S0003] [242] Die Umwandlung eines VARCHAR-Datentypen auf einen Datumsdatentyp in einem Out-of-Range-Wert geführt.

und ich versuchte

select cast(opencall.logdate as datetime) 
    from opencall 
    (
    '17/08/2016 10:33:08' 
    ,'17/08/2016 10:33:13' 
    ,'17/08/2016 10:33:17' 
    ,'17/08/2016 10:34:03' 
    ,'17/08/2016 10:34:14' 
    ,'17/08/2016 10:34:46' 
    ) 

I erhalten Fehler [S0003] [242] Die Umwandlung eines VARCHAR-Datentyp auf einen Typ Datumsdaten resultierten in einer Out-of-Range-Wert.

Was mache ich diesmal falsch?

:-)

+1

Ihr Server akzeptiert 'MM/DD/YYYY' Format so' 17/08/2016' betrachten '17' als Monat,' 08' wie Datum, so dass er die erroe – Arulkumar

+0

der außerhalb der Reichweite führt geschieht, weil des DD/MM-Formats, so dass SQL es als den Monat 17 liest, der nicht existiert. – scsimon

+0

Darüber hinaus behandelt Sql Server Datetime-Werte ohne die Vollzeitkomponente, als ob der verbleibende Teil der Zeitkomponente alle Null sind. Diese Abfrage funktioniert nur, wenn die 'opencall' Tabellen Werte haben, die ** genau ** übereinstimmen' 17/08/2016 10: 33: 08.000', '17.08.2016 10: 33: 13.000',' 17/08/2016 10: 33: 17.000', usw. Alle in der Tabelle _WILL_ gespeicherten gebrochenen Sekundenwerte unterbrechen diese Abfrage. –

Antwort

0

Der Grund Sie Fehler bekommen ist, dass Ihr System wird auf mm/dd/yyyy eingestellt und Sie versuchen, dd/mm/yyyy zu akzeptieren, daher wird jeder Wert mit dd über 12 oder mm über die entsprechende Anzahl von Tagen des Monats einen Fehler auslösen.

Um dies zu umgehen, verwenden Sie zweimal CONVERT, um das Format explizit zu definieren.

Die erste CONVERT kümmert sich um das Problem außerhalb des Bereichs, indem sie angibt, dass der Eingang das Format 103 (europäisch) hat. Die zweite CONVERT warf das Ergebnis auf 102, das US-Format MM/TT/JJJJ +.

select CONVERT(DATETIME, convert(datetime, '17/08/2016 10:33:08',103) ,102) 
+0

BINGO !!!! Danke Mann! nur zwei Wochen Flugzeit haben sich auf diesem SQL Server Zeug eingeloggt! und alles begann so ähnlich zu sehen! springe meine Arroganz! – TuckRollworthy

+0

Sicher, wenn es um Datumsformat geht, kann es schwierig werden, da es SQL-Standard, OS-Standard und ODBC-Einstellung auch beinhaltet. zu viele Zahlen! Prost Mate. (Obwohl es lustig ist, scheint jemand meine Antwort abgelehnt zu haben ...) – Kentaro

+0

Alternativ können Sie einfach SET DATEFORMAT dmy; Und CAST – Kentaro

0

der sicherste Weg ist es, das ISO-Format zu verwenden, um Ihre Datetime zu formatieren, wird es immer egal akzeptiert werden, was Kultur Ihre db in ist

gute Infos hier finden können.: http://www.karaszi.com/SQLServer/info_datetime.asp#RecommendationsInput

für Datum und Zeit, um diese mit Ihrem Format: '1998-02-23T14: 23: 05'

select cast(opencall.logdate as datetime) 
from opencall 
where logdate in 
(
    '2016-08-17T10:33:08', 
    and so on... 
+0

Es ist irgendwie saugt, aber mein Verständnis ist, gibt es einige Randfälle aus historischen Gründen, so dass das ISO-Format (YYYYMMDD) ist besser als gerade ISO 8601 (YYYY-MM-DD). Hier ist ein Beispiel: http://stackoverflow.com/questions/19565320/why-is-sql-server-misinterpreting-this-iso-8601-format-date (lesen Sie die Antwort, nicht die Frage) –

+0

ja Datum ist ein Schmerz in der ... Ich stimme zu, aber wenn Sie ISO-Formate verwenden, werden Sie nie irgendwelche Probleme – GuidoG

+0

Prost Chaps! Wenn ich die Wahl hätte, wie das Format für die Datenbank aussehen würde. Leider bin ich Technical Analyst, der das Reporting von der Rückseite einer Drittanbieteranwendung aus erstellt. So habe ich keine Wahl, in welchem ​​Format Dinge sein sollten. – TuckRollworthy

Verwandte Themen