Błąd występuje, ponieważ Ty (lub ktokolwiek zaprojektował ten stół) have a bunch of dates in VARCHAR
. Dlaczego ty (lub ktokolwiek zaprojektował tę tabelę) przechowujesz daty jako ciągi? Czy ty (lub ktokolwiek zaprojektował ten stół) również przechowuje wynagrodzenia i ceny oraz odległości jako struny?
znaleźć wartości, które są przyczyną problemów (tak, Ty (lub kto zaprojektował tabela) można je naprawić):
SELECT GRADUATION_DATE FROM mydb
WHERE ISDATE(GRADUATION_DATE) = 0;
Bet mieć co najmniej jeden wiersz. Napraw te wartości, a następnie USTAW TABELĘ. Albo zapytaj tego, kto zaprojektował stół, by USTAWIĆ STÓŁ. Naprawdę ładnie.
ALTER TABLE mydb ALTER COLUMN GRADUATION_DATE DATE;
Teraz nie trzeba się martwić o formatowaniu - zawsze można sformatować jako YYYYMMDD
lub YYYY-MM-DD
na kliencie, lub za pomocą CONVERT
w SQL. Kiedy masz ważny datę jako łańcuch znaków, można użyć:
SELECT CONVERT(CHAR(10), '20120101', 120);
... ale to jest lepiej zrobić na kliencie (jeśli w ogóle).
Popularny termin - śmieci, śmieci. Nigdy nie będziesz w stanie przekonwertować na randkę (nie przejmuj się konwersją na string w określonym formacie), jeśli twój wybór typu danych (lub wybór typu danych tego, kto zaprojektował tabelę) nieodłącznie pozwala na umieszczenie śmieci w twoim stole . Proszę napraw to. Lub zapytaj, kto zaprojektował stół (znowu, naprawdę fajnie), aby to naprawić.
Hmmm .. littleconfused tutaj. Czy ta konwersja nie jest automatycznie obsługiwana? – Coffee
wypróbuj SELECT CONVERT (DATETIME, '20080107') – pavanred
@Aaron Bertrand - Rozumiem twój punkt widzenia. –