SQL Server では多くの形式がサポートされています。CAST および CONVERT については、MSDN Books Online を参照してください。これらの形式のほとんどは、使用している設定に依存します。したがって、これらの設定が機能する場合と機能しない場合があります。
これを解決する方法は、SQL Server でサポートされている (少し変更された) ISO-8601 日付形式を使用することです。この形式は、SQL Server の言語と日付形式の設定に関係なく、常に機能します。
ISO-8601 形式は SQL Server でサポートされており、次の 2 つの形式があります。
YYYYMMDD
日付のみ (時間部分なし)。ここに注意してください:ダッシュはありません! 、それは非常に重要です! SQL Server の dateformat 設定とは無関係ではなく、すべての状況で機能するとは限り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 の代わりに) datatypeを使用することもできDATETIME
ます。現在のINSERT
ものは問題なく動作します! :-)DATETIME2
ははるかに優れており、変換の際にうるさいことはほとんどありません。とにかく、SQL Server 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 の言語と日付形式の設定でも問題ありません。