sql >> データベース >  >> RDS >> Sqlserver

SQL ServerでFORMAT()を使用するときに不変カルチャを指定する方法

    SQL Serverでは、FORMAT()を使用できます 日付/時刻と数値を文字列としてフォーマットする関数。特に、この関数は「ロケール対応」フォーマットを提供し、関数は「カルチャ」引数を受け入れます。これにより、実際のフォーマットに使用するカルチャまたは言語を指定できます。たとえば、en-usを渡すことができます 結果が米国英語形式でフォーマットされていることを確認します。

    カルチャ引数はオプションであるため、指定しない場合、出力は現在のセッションの言語によって決定されます。

    FORMAT() 関数は、.NET Frameworkでサポートされているすべてのカルチャを引数として受け入れます(SQL Serverで明示的にサポートされている言語に限定されません)。

    .NET Frameworkでサポートされているカルチャの1つは、不変のカルチャです。不変の文化は文化に影響されません。より具体的には、この文化は英語に関連付けられていますが、国や地域には関連付けられていません。

    そのFORMAT()を指定するには 不変のカルチャを使用して結果を出力する必要があります。単に"iv"を使用してください。 文化の議論(3番目の議論)のために。

    例1-通貨

    不変のカルチャを使用して値を通貨としてフォーマットする例を次に示します。

    SELECT FORMAT(123, 'C', 'iv') Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | ¤123.00  |
    +----------+
    

    これにより、出力に小数点以下の小数部が含まれるようになります。また、不特定の通貨を示すために使用される通貨記号(¤)が付加されます(これはUnicode文字U + 00A4です)。

    例2–日付

    不変のカルチャと短い日付形式を使用して日付を書式設定する例を次に示します。

    DECLARE @date date = '2030-05-25';
    SELECT FORMAT(@date, 'd', 'iv') Result;
    

    結果:

    +------------+
    | Result     |
    |------------|
    | 05/25/2030 |
    +------------+
    

    不変カルチャの短い日付形式はMM/dd/yyyyです。

    ここでも同じですが、今回はアメリカ英語、イギリス、ドイツ(ドイツ)の文化と比較します。

    DECLARE @date date = '2030-05-25';
    SELECT 
      FORMAT(@date, 'd', 'iv') 'Invariant Culture',
      FORMAT(@date, 'd', 'en-us') 'US English',
      FORMAT(@date, 'd', 'en-gb') 'British',
      FORMAT(@date, 'd', 'de-de') 'German (Deutsch)';
    

    結果:

    +---------------------+--------------+------------+--------------------+
    | Invariant Culture   | US English   | British    | German (Deutsch)   |
    |---------------------+--------------+------------+--------------------|
    | 05/25/2030          | 5/25/2030    | 25/05/2030 | 25.05.2030         |
    +---------------------+--------------+------------+--------------------+
    

    例3–すべての標準の日付と時刻の形式

    これは不変のカルチャを使用する別の方法ですが、今回は datetimeoffsetをフォーマットします .NETFrameworkでサポートされているすべての標準の日付と時刻の形式の文字列を使用した値。

    DECLARE @date datetimeoffset, @culture char(2); 
    SET @date = '2030-05-25 23:59:30.1234567 +07:00';
    SET @culture = 'iv';
    SELECT 
      FORMAT(@date, 'd', @culture) AS 'd',
      FORMAT(@date, 'D', @culture) AS 'D',
      FORMAT(@date, 'f', @culture) AS 'f',
      FORMAT(@date, 'F', @culture) AS 'F',
      FORMAT(@date, 'g', @culture) AS 'g',
      FORMAT(@date, 'G', @culture) AS 'G',
      FORMAT(@date, 'm', @culture) AS 'm',
      FORMAT(@date, 'M', @culture) AS 'M',
      FORMAT(@date, 'o', @culture) AS 'o',
      FORMAT(@date, 'O', @culture) AS 'O',
      FORMAT(@date, 'r', @culture) AS 'r',
      FORMAT(@date, 'R', @culture) AS 'R',
      FORMAT(@date, 's', @culture) AS 's',
      FORMAT(@date, 't', @culture) AS 't',
      FORMAT(@date, 'T', @culture) AS 'T',
      FORMAT(@date, 'u', @culture) AS 'u',
      FORMAT(@date, 'U', @culture) AS 'U',
      FORMAT(@date, 'y', @culture) AS 'y',
      FORMAT(@date, 'Y', @culture) AS 'Y';
    

    結果(垂直出力を使用):

    d | 05/25/2030
    D | Saturday, 25 May 2030
    f | Saturday, 25 May 2030 23:59
    F | Saturday, 25 May 2030 23:59:30
    g | 05/25/2030 23:59
    G | 05/25/2030 23:59:30
    m | May 25
    M | May 25
    o | 2030-05-25T23:59:30.1234567+07:00
    O | 2030-05-25T23:59:30.1234567+07:00
    r | Sat, 25 May 2030 16:59:30 GMT
    R | Sat, 25 May 2030 16:59:30 GMT
    s | 2030-05-25T23:59:30
    t | 23:59
    T | 23:59:30
    u | 2030-05-25 16:59:30Z
    U | NULL
    y | 2030 May
    Y | 2030 May
    

    不変の文化はあなたのシステムでは機能しませんか?

    不変のカルチャをシステムで機能させることができない場合は、古いバージョンの.NETFrameworkがインストールされていることが原因である可能性があります。 .NET Framework 4.8のドキュメントには、ISO639-12文字のコード"iv"を使用して不変のカルチャを利用できることが明示的に記載されています。 。

    ただし、このStack Overflowの質問に対するSolomonRutzkyの回答は、これは.NET4.5からのみ利用可能であった可能性があることを示唆しています。

    以前のバージョンの.NETを使用しても機能しない場合は、最新バージョン(または4.5以降のバージョン)にアップグレードしてみてください。


    1. unixODBCドライバーマネージャーの非システムバージョンでのRStudioの使用

    2. エラーの修正:SQLiteの「UNIONの左右のSELECTには同じ数の結果列がありません」

    3. sql ORDER BY複数の値を特定の順序で?

    4. ClusterControl1.7を使用したエージェントベースのデータベース監視の紹介