SQL Server Konvertierung von int to Date
Habe ich ein Szenario, wo ich eine int-Spalte mit den folgenden Terminen zum Beispiel:
20131210
20131209
Was ich will, ist, ich möchte konvertieren Sie die oben, um einen Datums-Datentyp, so dass ich es verwenden können, mit GETDATE () - Funktion.
Dies ist mein Versuch, aber ich erhalte eine Fehlermeldung:
SELECT CONVERT(DATETIME, CONVERT(varchar(8), MyColumnName))
FROM MyTable
WHERE DATEADD(day, -2, CONVERT(DATETIME, CONVERT(CHAR(8), MyColumnName))) < GetDate()
Dies ist der Fehler, bin ich immer:
Fehler bei der Konvertierung beim konvertieren von Datum und/oder Zeit von-Zeichenfolge.
Wenn der Wert ein int, versuchen
teilen Sie die Zeichenfolge.
SELECT CAST(CAST(20131210 AS VARCHAR(12)) AS DATE)
. Ärgerlich ja, aber es funktioniert auf meinem 2012.teilen Sie die Zeichenfolge.
InformationsquelleAutor user3092895 | 2013-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zumindest ein schlechtes Datum in der Spalte (es könnte sein
99999999
oder20130231
oder wer weiß). Dies ist, was passiert, wenn Sie den falschen Datentyp. Sie erkennen die schlechte Zeile(N) mit:Dann können Sie diese zu beheben oder zu löschen.
Sobald Sie das tun, sollten Sie beheben den Tisch. Es gibt absolut keine auf den Kopf, um die Speicherung von Datumsangaben als ganze zahlen und eine ganze Menge Nachteile.
Sobald Sie das Datum gespeichert, im richtigen format, wird die Abfrage sehr viel einfacher. Und ich empfehle, anwenden von Funktionen usw. auf der rechten Seite des Prädikats im Gegensatz zur Anwendung auf die Spalte (dies tötet die SQL Server-Fähigkeit zum effizienten Gebrauch von einem index auf die Spalte, die Sie haben sollte, wenn dies ist eine gemeinsame Abfrage-Muster).
InformationsquelleAutor Aaron Bertrand
Versuchen:
InformationsquelleAutor Question3CPO
Ich habe ein ähnliches problem hatte, wo ich brauche, um zu konvertieren, INT to DATE und Bedarf gerecht zu werden für Werte von 0. Diese case-Anweisung hat den trick für mich
InformationsquelleAutor Peffa