私は常に日時の変換にこのコードを使用します:
DECLARE @a datetime
SET @a= CONVERT(datetime,'2012-12-28 14:04:43')
print @a
しかし、これはもう機能しません!SQL Server を再起動しようとしましたが、問題は残ります。
画像のエラーはイタリア語です。英語では次のようになります。
char データ型を datetime に変換した結果、datetime 値が許容値の範囲外になりました。
私は常に日時の変換にこのコードを使用します:
DECLARE @a datetime
SET @a= CONVERT(datetime,'2012-12-28 14:04:43')
print @a
しかし、これはもう機能しません!SQL Server を再起動しようとしましたが、問題は残ります。
画像のエラーはイタリア語です。英語では次のようになります。
char データ型を datetime に変換した結果、datetime 値が許容値の範囲外になりました。
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 以降で有効です。
SQL Server 2008 以降とDATE
データ型 (のみDATE
-ではなく DATETIME
!) を使用する場合、実際にYYYY-MM-DD
形式も使用でき、SQL Server の任意の設定でも機能します。
なぜこのトピック全体がそれほどトリッキーでややこしいのか、私に聞かないでください。ただし、このYYYYMMDD
形式では、SQL Server のどのバージョンでも、SQL Server の言語と日付形式の設定でも問題ありません。
したがって、具体的なケースでは、これを使用します:
DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28T14:04:43')
print @a
これは、任意の言語と日付形式の設定を使用して、任意のSQL Server インストールで機能するはずです。
元のコードを米国英語で実行すると、問題なく動作します。
SET LANGUAGE English
DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28 14:04:43')
print @a
Dec 28 2012 2:04PM
ただし、言語としてイタリア語 (またはドイツ語、英国語、またはフランス語) を使用する場合、日付/時刻文字列の途中に がない形式は言語に依存せず、「安全」ではないため、失敗します。T
SET LANGUAGE Italian
DECLARE @a datetime
SET @a= CONVERT(datetime, '2012-12-28 14:04:43')
print @a
Msg 242, Level 16, State 3, Line 4
La conversione di un tipo di dati varchar in datetime ha generato un valore non compreso nell'intervallo dei valori contractiti.
文字列を日時に変換しようとしています。問題は日付部分です。最善の方法は、日付文字列を取得してISO format (yyyymmdd)
から変換することです。これを試して;
DECLARE @a datetime
SET @a= CONVERT(datetime,replace('2012-12-28 14:04:43', '-',''))
print @a
私の推測では、コンピューターでデフォルトの日時形式が変更されました。変換仕様を再度追加します。
SET @a= CONVERT(datetime,'2012-12-28 14:04:43', 121)