あなた(またはこのテーブルを設計した人)が原因でエラーが発生していますhave a bunch of dates in VARCHAR
。あなた (またはこのテーブルを設計した人) が日付を文字列として保存するのはなぜですか? あなた (またはこのテーブルを設計した人) は、給与、価格、距離も文字列として保存しますか?
問題の原因となっている値を見つけるには (あなた (またはこのテーブルを設計した人) が修正できるように):
SELECT GRADUATION_DATE FROM mydb
WHERE ISDATE(GRADUATION_DATE) = 0;
少なくとも 1 行はあるはずです。これらの値を修正してから、テーブルを修正します。または、テーブルを設計した人にテーブルを修正するよう依頼してください。本当に素敵です。
ALTER TABLE mydb ALTER COLUMN GRADUATION_DATE DATE;
これで、書式設定について心配する必要はありません。クライアントとして、またはクライアント上で、または SQL で使用して、いつでも書式設定YYYYMMDD
できYYYY-MM-DD
ますCONVERT
。文字列リテラルとして有効な日付がある場合は、次を使用できます。
SELECT CONVERT(CHAR(10), CONVERT(datetime, '20120101'), 120);
...しかし、これはクライアントで行う方が良いです (もしあれば)。
ガベージ イン、ガベージ アウトという一般的な用語があります。データ型の選択(またはテーブルを設計した人のデータ型の選択)が本質的にテーブルへのガベージを許可する場合、日付に変換することはできません(特定の形式の文字列に変換することは気にしないでください)。修正してください。または、テーブルを設計した人に (これもまた、実に見事に) 修正を依頼してください。