2016-05-21 14 views
0

Es gibt eine Spalte TriggerDate des Typs varchar(50). Es speichert Werte im Format MM/dd/yyyy (zB: 21.05.2016).Datum Konvertierungsproblem in SQL Server 2014

sind 10 Einträge in dieser Tabelle für das Datum 21. Mai 2016

Wenn ich diese Abfrage ausführen

select * 
from Analytics 
where convert(date, TriggerDate) = '2016-05-21' 

ich das Ergebnis in dem Register Ergebnisse erhalten, aber die Nachrichten Registerkarte zeigt diese Fehler

Msg 241, Ebene 16, Status 1, Zeile 1
Fehler bei der Konvertierung, wenn Datum und/oder Uhrzeit aus Zeichenfolge zu konvertieren.

Allerdings, wenn ich

laufen
select top 10 * 
from Analytics 
where convert(date, TriggerDate) = '2016-05-21' 

es keine Fehler

Ausführen select CONVERT(date,'05/21/2016') kehrt 2016-05-21 ohne Fehler.

Was mich verblüfft ist: Wie ist der Top 10 macht den Unterschied, und es funktioniert auf meinem Testserver auch SQL Server 2014

läuft Wie soll ich dieses Problem lösen?

Verwenden von SQL Server 2014 in Windows Server 2012 R2 und das Systemdatum im Format 5/21/2016

+2

Es gibt Zeilen mit ungültigem Datumsformat. Deshalb sollten Sie nicht varchar verwenden, um Datumswert – Squirrel

+0

zu speichern Ich habe mein Q mit einer neuen Beobachtung aktualisiert. Es gibt keine Möglichkeit, den Datentyp jetzt zu ändern. Es ist ein riesiger Tisch. Irgendeine Idee, wie ich diese Täterreihen herausfinden kann. – Qwerty

+2

Verwenden Sie 'ISDATE()' https://msdn.microsoft.com/en-us/library/ms187347.aspx – Squirrel

Antwort

3

SQL Server konvertieren String

SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy 
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd ANSI date with century 
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy 
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy 
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy 

Dieses

+0

Nur Fall 1 gilt für mich und es ist der gleiche Fehler – Qwerty

+0

Dies wird in' DateTime' konvertiert - nicht 'Datum' ...... es gelten andere Regeln! –

0

Verwenden Versuchen bis heute Unterfrage kann es dir helfen.

select * 
from Analytics 
where convert(varchar(10), cast(TriggerDate as date), 102) = '2016.05.21'