日付を文字列、特にUnicode 文字列として保存するのはやめてください。カレンダーの将来のバージョンで、数字の代わりにウムラウト、ポンド記号、象形文字、北京語が使用されることを懸念していますか?
日付を日付として格納します。それが、これらのデータ型の目的です。無効な解釈について心配する必要がないことに加えて、 や などのすべての利点も得られます。列に意味のDATEPART
ないDATEADD
ものを誰かが詰め込むことを心配する必要もありません (31/02/2012
から'I don''t want to enter a real date'
...
それまでの間、スタイル番号を使用する必要がありますCONVERT
(これは では確実に機能しませんCAST
):
SELECT CONVERT(DATETIME, '13/06/2013 09:32', 103);
で動作させるには、それに応じてまたは設定を設定CAST
できますが、ビュー内でこれを行うことはできず、とにかくコードが非常に脆弱になります。LANGUAGE
DATEFORMAT
SET DATEFORMAT DMY;
SELECT CAST('13/06/2013 09:32' AS DATETIME);
または
SET LANGUAGE BRITISH;
SELECT CAST('13/06/2013 09:32' AS DATETIME);
非常に広いマージンで、追加のコントロールが提供することを好み、一貫性のために、このコントロールが必要ない場合でも、 toCONVERT
のすべてのインスタンスをほぼ一方的に変更します(場合によっては使用する理由、必要な場合、単にできる場合)常に使用しますか?)。CAST
CONVERT
CAST
CONVERT
CONVERT
編集
不適切なデータ型の選択が原因でテーブルに忍び込んだガベージ データを特定するには、次のようにします (その後、データを修正するか、データ型を修正して、これが再び発生しないようにすることをお勧めします)。
SET DATEFORMAT DMY;
SELECT date_column FROM dbo.table_name WHERE ISDATE(date_column) = 0;