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

SQL Server(T-SQL)でのFORMAT()関数のしくみ

    SQL Serverでは、T-SQL FORMAT()を使用できます 数値や日付などの値をフォーマットされた文字列として返す関数。

    フォーマットする値を指定し、使用するフォーマットを指定します。この関数は、値をフォーマットするときに使用するカルチャを指定できるオプションの引数を受け入れます。

    構文

    構文は次のようになります:

    FORMAT ( value, format [, culture ] )
    

    value フォーマットする値であり、 format 目的の形式を指定する有効な形式文字列です。

    オプションのculture 引数を使用してカルチャを指定できます。省略した場合、現在のセッションの言語が使用されます。

    FORMAT 関数は非決定的です。

    例1-数値をフォーマットする

    数値の書式設定の例を次に示します。

    SELECT FORMAT(1, 'N') AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | 1.00     |
    +----------+
    

    この場合、 Nを使用しました フォーマット文字列として。これは、値を数値として出力するための標準の数値形式指定子です。この特定のフォーマット指定子により、出力は整数桁と10進数、グループ区切り文字、およびオプションの負の符号付きの小数点記号でフォーマットされます。このフォーマット指定子は大文字と小文字を区別しないため、 N またはn 大丈夫です。

    例2–通貨へのフォーマット

    数値を通貨としてフォーマットする例を次に示します。

    SELECT FORMAT(1, 'C') AS Result;
    

    結果:

    +----------+
    | Result   |
    |----------|
    | $1.00    |
    +----------+
    

    その他の数値形式

    FORMAT()で使用できるフォーマット文字列は他にもたくさんあります。 働き。たとえば、パーセンテージ、固定小数点、指数(科学)、16進数などのフォーマット文字列があります。

    数値形式の文字列は、標準とカスタムに分けられます。

    次の2つの記事には、例を含むすべての数値形式の文字列がリストされています。

    • 標準の数値形式の文字列
    • カスタム数値形式文字列

    数値の書式設定のその他の例については、SQLServerで数値を書式設定する方法も参照してください。

    例3–日付をフォーマットする

    日付の書式設定の例を次に示します。

    SELECT 
      GETDATE() AS 'Unformatted Date',
      FORMAT( GETDATE(), 'D') AS 'Formatted Date';
    

    結果:

    +-------------------------+------------------------+
    | Unformatted Date        | Formatted Date         |
    |-------------------------+------------------------|
    | 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 |
    +-------------------------+------------------------+
    

    この場合、 Dを使用しました 長い日付パターンを指定します。

    その他の日付形式

    日付のフォーマットに使用できるフォーマット文字列は他にもたくさんあります。数値形式の文字列と同様に、日付と時刻の形式の文字列は標準形式とカスタム形式に分けられるため、独自のカスタム形式を作成することも、標準形式に依存することもできます。

    次の2つの記事には、例を含むすべての日付と時刻の形式の文字列がリストされています。

    • 標準の日付と時刻の形式の文字列
    • カスタムの日付と時刻の形式の文字列

    その他の例については、SQLServerで日付と時刻をフォーマットする方法も参照してください。

    例4–オプションのカルチャ 引数

    カルチャーの使用例を次に示します。 さまざまな通貨で値を返す引数:

    SELECT 
        FORMAT(1, 'C', 'fr-FR') AS 'France', 
        FORMAT(1, 'C', 'th-TH') AS 'Thailand', 
        FORMAT(1, 'C', 'ja-JP') AS 'Japan';
    

    結果:

    +----------+------------+---------+
    | France   | Thailand   | Japan   |
    |----------+------------+---------|
    | 1,00 €   | ฿1.00      | ¥1      |
    +----------+------------+---------+
    

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

    この引数を指定しない場合は、現在のセッションの言語が使用されます。

    その他の例については、言語設定が FORMAT()に与える影響を参照してください。 結果。

    例5–無効なカルチャ 引数

    無効な文化を提供すると、エラーが発生します:

    SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';
    

    結果:

    The culture parameter 'oop-SS!' provided in the function call is not supported.
    

    例6–無効なフォーマット値

    ただし、他のエラーの場合、関数は NULLを返します 。たとえば、フォーマットする無効な値を指定するとどうなりますか?

    SELECT FORMAT(GETDATE(), 'C') AS 'Result';
    

    結果:

    +----------+
    | Result   |
    |----------|
    | NULL     |
    +----------+
    

    この場合、日付を通貨にフォーマットしようとしたため、結果は NULLになりました。 。

    有効なデータ型

    FORMAT() .NET Framework共通言語ランタイム(CLR)の存在に依存し、CLRフォーマットルールを使用します。

    次のデータ型は、 FORMAT()でフォーマットできます。 働き。このリストには、入力文字列の受け入れ可能なデータ型と、それらの.NETFrameworkマッピングの同等の型が含まれています。

    カテゴリ タイプ .NETタイプ
    数値 bigint Int64
    数値 int Int32
    数値 smallint Int16
    数値 tinyint バイト
    数値 10進数 SqlDecimal
    数値 数値 SqlDecimal
    数値 フロート ダブル
    数値 本物 シングル
    数値 smallmoney 10進数
    数値 お金 10進数
    日付と時刻 日付 DateTime
    日付と時刻 時間 TimeSpan
    日付と時刻 日時 DateTime
    日付と時刻 smalldatetime DateTime
    日付と時刻 datetime2 DateTime
    日付と時刻 datetimeoffset DateTimeOffset

    「時間」データ型のコロンとピリオドのエスケープ

    FORMATを使用する場合 、コロンとピリオドはエスケープする必要があります(これはCLRフォーマット規則に準拠しています)。したがって、フォーマット文字列(2番目のパラメータ)にコロンまたはピリオドが含まれている場合、入力値(最初のパラメータ)が時間の場合、コロンまたはピリオドはバックスラッシュでエスケープする必要があります。 データ型。

    例:

    SELECT 
      CAST('12:15' AS time) AS 'Unformatted Data',
      FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped',
      FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';
    

    結果:

    +--------------------+-------------+-----------+
    | Unformatted Data   | Unescaped   | Escaped   |
    |--------------------+-------------+-----------|
    | 12:15:00           | NULL        | 12.15     |
    +--------------------+-------------+-----------+
    

    したがって、予想どおり、エスケープされていない文字列は NULLを返します。 。

    前述のように、これは時間にのみ適用されます データ・タイプ。入力値を別のデータ型に変更する場合、それをエスケープする必要はありません:

    SELECT 
      CAST('12:15' AS datetime) AS 'Unformatted Data',
      FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped',
      FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';
    

    結果:

    +-------------------------+-------------+-----------+
    | Unformatted Data        | Unescaped   | Escaped   |
    |-------------------------+-------------+-----------|
    | 1900-01-01 12:15:00.000 | 12.15       | 12.15     |
    +-------------------------+-------------+-----------+
    

    この場合、入力値は datetime 、したがって、結果はエスケープせずに問題ありません。

    バックスラッシュを使用して、結果文字列に含めたい他の文字をエスケープすることもできます。そうしないと、フォーマット指定子として解釈されます。文字の前に円記号を付けると、次の文字が文字リテラルであり、結果の文字列に変更せずに含める必要があることを意味します。

    カスタムの日付と時刻の形式の文字列では、 d f F g h H K m M s t y z 、または / 文字は、リテラル文字ではなく、カスタム形式の指定子として解釈されます。

    カスタム数値形式の文字列では、 0 、および シンボルは、リテラル文字ではなくフォーマット指定子として解釈されます。大文字と小文字のE +と同様に および- シンボルは、フォーマット文字列内の位置によっては、フォーマット指定子として解釈される場合もあります。

    結果の文字列に円記号を含める必要がある場合は、別の円記号でエスケープしてください。

    リモート処理

    FORMAT() CLRの存在に依存するため、機能をリモート化することはできません。 CLRを必要とする機能をリモート処理すると、リモートサーバーでエラーが発生する可能性があります。

    FORMAT()を使用する場合 機能

    FORMAT()をお勧めします 関数は、日付/時刻と数値を文字列としてロケールに対応したフォーマットに使用し、一般的なデータ型の変換には CAST()のいずれかを使用します。 関数またはCONVERT() 代わりに関数を使用する必要があります。


    1. PHPを使用してサーバーに画像をアップロードするときに、他の情報とともにファイル名をデータベースに保存するにはどうすればよいですか?

    2. SQLServerでインポート/エクスポートウィザードを使用する方法-SQLServer/TSQLチュートリアルパート104

    3. MySQLでのREGEXP_LIKE()関数のしくみ

    4. OracleのNVL2機能