Der Fehler tritt auf, weil Sie (oder wer auch immer diese Tabelle entworfen hat) have a bunch of dates in VARCHAR
. Warum speichern Sie (oder wer auch immer diese Tabelle entworfen hat) Daten als Zeichenfolgen? Haben Sie (oder wer auch immer diese Tabelle entworfen hat) auch Gehalt und Preise und Entfernungen als Strings gespeichert?
Um die Werte zu finden, die Probleme verursachen (so dass Sie (oder wer auch immer diese Tabelle entworfen) kann sie beheben):
SELECT GRADUATION_DATE FROM mydb
WHERE ISDATE(GRADUATION_DATE) = 0;
Bet haben Sie mindestens eine Zeile. Fix diese Werte und dann FIX THE TABLE. Oder fragen Sie, wer den Tisch entworfen hat, um den Tisch zu reparieren. Wirklich nett.
ALTER TABLE mydb ALTER COLUMN GRADUATION_DATE DATE;
Jetzt müssen Sie sich nicht um die Formatierung Sorge - Sie immer als YYYYMMDD
oder YYYY-MM-DD
auf dem Client formatiert werden kann, oder mit CONVERT
in SQL. Wenn Sie ein gültiges Datum als Stringliteral haben, können Sie verwenden:
SELECT CONVERT(CHAR(10), '20120101', 120);
... aber besser auf dem Client ausgeführt wird (wenn überhaupt).
Es gibt einen beliebten Begriff - Müll in, Müll raus. Sie werden nie in der Lage sein, in ein Datum zu konvertieren (egal, in einen String in einem bestimmten Format zu konvertieren), wenn Ihre Datentypauswahl (oder die Datentypauswahl desjenigen, der die Tabelle entworfen hat) inhärent Müll in Ihrer Tabelle zulässt . Bitte repariere es. Oder fragen Sie, wer auch immer den Tisch entworfen hat (nochmal, wirklich schön), um es zu reparieren.
Hmmm .. ein littleconfused. Wird diese Konvertierung nicht automatisch durchgeführt? – Coffee
versuchen SELECT CONVERT (DATETIME, '20080107') – pavanred
@Aaron Bertrand - Ich verstehe Ihren Standpunkt. –