SQLServerでサポートされている形式は多数あります。CASTおよびCONVERTに関するMSDNBooksOnlineを参照してください。これらの形式のほとんどは依存です 使用している設定(したがって、これらの設定が機能する場合と機能しない場合があります)について説明します。
これを解決する方法は、(わずかに適合した)ISO-8601日付形式を使用することです。 これはSQLServerでサポートされています-この形式は常に機能します -SQLServerの言語と日付形式の設定に関係なく。
SQL ServerでサポートされているISO-8601形式には、次の2つの種類があります。
-
YYYYMMDD
日付のみ(時間部分なし)。ここに注意してください:ダッシュはありません! 、それは非常に重要です!YYYY-MM-DD
ない SQL Serverの日付形式の設定とは無関係であり、しない すべての状況で機能します!
または:
-
YYYY-MM-DDTHH:MM:SS
日付と時刻について-ここに注意してください:この形式は持っています ダッシュ(ただし、できます 省略)、および固定のT
DATETIME
の日付と時刻の部分の間の区切り文字として 。
これはSQLServer2000以降で有効です。
したがって、特定のケースでは、次の文字列を使用してください:
insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');
そしてあなたは元気であるはずです(注:あなたは国際的な24時間を使う必要があります このための12時間AM/PM形式ではなく形式)。
または :SQLServerを使用している場合2008 以上の場合、DATETIME2
を使用することもできます データ型(プレーンなDATETIME
の代わりに )と現在のINSERT
問題なく動作します! :-) DATETIME2
変換の方がはるかに優れており、変換の煩わしさが大幅に軽減されます。いずれにせよ、SQLServer2008以降の推奨される日付/時刻データ型です。
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のすべてのバージョン、およびSQLServerの言語と日付形式の設定に問題はありません。