1

SQL Server 2005 および SQL Server 2008 で、英語とドイツ語で表現が異なる値を操作するときに問題が発生します。サーバーとOSはドイツ語版として動作しています。

SET LANGUAGE deutsch;
SELECT 
    CONVERT(datetime, '31. Dezember 1999') as a, 
    CONVERT(nvarchar, CONVERT(datetime, '31. Dezember 1999')) as b, 
    CONVERT(float,'3.14159') as p,
    CONVERT(nvarchar, CONVERT(float,'3.14159')) as q;

管理コンソールの出力は次のとおりです。

a=1999-12-31 00:00:00.000   
b=Dez 31 1999 12:00AM
c=3,14159   
d=3.14159
dateformat=dmy

これは矛盾しています。(a) では、1999 年 12 月 31 日のドイツ語表現が正しく解析され、表示されます (そして、ドイツ語のみが機能します..)。同じ日付を CONVERT で明示的に変換すると、英語の日付形式とドイツ語の省略形の月名が混在した文字列が返されます (よく見ると、「Dec 31」ではなく「Dez 31」と表示されます)。

ただし、 p は英語表記 (小数点) の文字列から浮動小数点数に変換されますが、ドイツ表記 (小数点のカンマを使用) で表示されますが、nvarchar への明示的な変換では、再び英語表記の数値が生成されます。OTOH CONVERT() は、float への変換でドイツ語表記の入力を受け入れません。

だから、私は CONVERT 関数を持っています:

  1. これは、ドイツ語表記の日時に変換する文字列のみを受け入れます。
  2. ただし、float に変換する文字列は英語でのみ受け入れます。
  3. そして、datetime 値をドイツ語と英語の両方を組み合わせた nvarchar に変換します。
  4. float 値をEnglishに変換します。

しかし、私が必要としているのは、SQL Server 2005、2008 の関数で、テキストを現在のユーザー言語からサポートされている型 (datetime、float...) の値に変換し、これらの値を現在のユーザーに関するテキスト表現に変換します。言語。

この機能は何ですか?

4

1 に答える 1

1

言語設定

[s]セッションの言語環境を指定します。セッション言語によって、日時の形式とシステム メッセージが決まります。

CONVERT関数 120のスタイル パラメータを設定すると、言語に依存しない変換がサポートされます。

float 値の変換については、こちらの質問をご覧 ください

一般に、データベースでは言語固有の書式設定を避け、UI に実装する必要があります。

于 2012-07-09T20:12:06.047 に答える