SQL Serverでサポートされている多くの形式があります。CASTおよびCONVERTに関するMSDN Books Onlineを参照してください。これらのフォーマットのほとんどは、使用している設定に依存しているため、これらの設定が機能する場合と機能しない場合があります。
これを解決する方法は、SQL Serverでサポートされている(少し変更された)ISO- 8601日付形式を使用することです。この形式は、SQL Serverの言語や日付形式の設定に関係なく、常に機能します。
ISO-8601形式は、 SQL Serverでサポートされている2種類があります:
YYYYMMDD日付のみ(時間部分なし)。ここに注意:ダッシュなし!、それは非常に重要です!ありません、あなたのSQL ServerのDATEFORMATの設定とは独立となり、NOTすべての状況で働きます!YYYY-MM-DD
または:
YYYY-MM-DDTHH:MM:SS日付と時刻の場合-ここに注意してください:この形式にはダッシュ(省略可能)があり、Tの日付と時刻の部分の間の区切り文字として固定されていますDATETIME。
これは、SQL Server 2000以降で有効です。
だからあなたの具体的なケースでは-これらの文字列を使用してください:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
そして、あなたは大丈夫です(注:これには、12時間のAM / PM形式ではなく、国際的な24時間形式を使用する必要があります)。
または、SQL Server 2008以降を使用している場合は、DATETIME2(plainの代わりにDATETIME)データ型を使用することもでき、現在のINSERT問題は問題なく機能します。:-) DATETIME2変換の方がはるかに優れていて、うるさくありません。SQLServer 2008以降では、日付/時刻のデータ型として推奨されています。
SELECT
CAST('02-21-2012 6:10:00 PM' AS DATETIME2), -- works just fine
CAST('01-01-2012 12:00:00 AM' AS DATETIME2) -- works just fine
なぜこのトピック全体がトリッキーでやや紛らわしいのか、私に聞かないでください。それがまさにその通りです。ただし、このYYYYMMDD形式では、SQL Serverのすべてのバージョン、およびSQL Serverの言語と日付形式の設定に問題はありません。