3

SQL Server 2008 を実行している 2 つのサーバーがあり、次のクエリがあります。

SELECT cast('13/1/2011' as datetime)

サーバー Aでこのクエリを実行すると、次の結果が得られます。

2011-01-13 00:00:00.000

ただし、これをサーバー Bで実行すると、次の結果が得られます。

varchar データ型を datetime データ型に変換すると、範囲外の値になりました。

エラーは発生しませんが、12/1/2011返されるため、これは英国/米国の日付形式の問題であると思います2011-12-01 00:00:00.000

サーバー Bがサーバー Aと同じ結果を得るにはどうすればよいですか? どの設定をどこで変更する必要がありますか?

4

2 に答える 2

6

これらのあいまいな日付形式がどのように解釈されるかを制御するのは、 の言語設定です(ただし、これは明示的なステートメントloginでオーバーライドできます)。SET DATEFORMAT

は次のDEFAULT_LANGUAGE方法で変更できます。ALTER LOGIN

于 2011-11-08T16:39:08.883 に答える
1

さらに良いことに、日付変換が期待どおりに機能することを保証するためにSET DATEFORMATまたはの設定に依存しないでください。DEFAULT_LANGUAGESQL Server では、ベスト プラクティスとして、使用中の言語設定や日付の形式に関係なく、中立的な形式を使用するか、明示的な形式指定子を使用する必要があります。両方のサーバーで次のことを試してみてください。問題はありません。

  • 日付ニュートラル形式:Convert(datetime, '20110113')
  • 日付ニュートラル形式:Convert(datetime, '2011-01-13T00:00:00')
  • 明示的な書式指定子: Convert(datetime, '13/1/2011', 103)- 詳細については、「 SQL Server オンライン ブック: キャストと変換」を参照してください。
于 2013-03-28T16:18:39.630 に答える