6

SQL Server 2008R2Expressの特定のインスタンスのロケールで多くの問題が発生しています。

私は英国にいますが、次のことが失敗します。

SELECT CAST('2012-12-31' AS DATETIME)

エラーメッセージ:

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

Windowsサーバーのロケールはイギリス英語です。私のログインロケールはイギリス英語です。「重要な場合」の照合はLatin1_General_CI_ASです。

データベースの「言語」は英語(米国)ですが、これは別のサーバー上の別のインスタンスと同じであり、上記のSQLは失敗しません。

何かご意見は?

4

3 に答える 3

9

データベース接続を行うユーザー(SQLユーザー)の場合、言語を英語に設定します。

これは、クエリを発行する接続のSQLユーザーに固有の設定です。

これが問題であるかどうかを確認する1つの方法...ManagementStudioでこれを実行し、クエリを発行するSQLユーザーとしてログインします

SET LANGUAGE English
SELECT CAST('2012-12-31' AS DATETIME)

これが機能する場合は、SQLユーザーのデフォルト言語を適切に設定してください

于 2012-05-30T15:00:10.647 に答える
7

YYYY-MM-DD日付リテラルには使用せず、常にを使用してくださいYYYYMMDD。これは、ロケール、日付形式の設定、言語の設定、地域の設定などに関係なく、失敗することはありません。

SELECT CAST('20121231' AS DATETIME);

おそらく読む価値があります:

于 2012-05-30T15:00:30.850 に答える
4

変換時に日付形式を明示的に定義する必要があります。この場合は120です。

SELECT CONVERT(DATETIME,'2012-12-31',120)

このページを見て、他の日付形式を確認できます:http: //msdn.microsoft.com/en-us/library/ms187928.aspx

于 2012-05-30T14:57:52.520 に答える