FORMAT()
を使用するときに、SQLServerで負の数を角かっこで囲む簡単な方法は次のとおりです。 働き。
ここでの目標は、角かっこはネガティブにのみ追加されることです。 値。正の値またはゼロには角かっこは追加されません。また、角かっこは、他の方法で表示されるマイナス記号を置き換えます(つまり、角かっこを使用するとマイナス記号は表示されません)。
多くの場合、書式設定はプレゼンテーション層に任せるのが最善ですが、SQLServerのT-SQLソリューションを指示する場合があります。このような場合、この記事がお役に立てば幸いです。
例1-自動括弧
前述のように、この記事のソリューションはFORMAT()
を使用します 働き。この関数は、数値(または日付/時刻)値をフォーマットしてから、その値のフォーマットされた文字列表現を返します。
この関数を呼び出すときは、フォーマットする値と、フォーマット方法を決定するフォーマット文字列を渡します。 3番目の引数を指定して、出力に使用するロケール/カルチャを定義することもできます。
私がこれを使っているのは、FORMAT()
の場合があるということです 使用されているフォーマット文字列とカルチャに応じて、負の値を自動的に括弧で囲みます。
2つの異なる「文化」引数を使用して数値を通貨としてフォーマットする例を次に示します。
SELECT FORMAT(-1.23, 'C', 'en-us') 'en-us', FORMAT(-1.23, 'C', 'en-gb') 'en-gb';
結果:
+---------+---------+ | en-us | en-gb | |---------+---------| | ($1.23) | -£1.23 | +---------+---------+
この場合、負の値を括弧で囲むかどうかを決定するのは、フォーマット文字列とカルチャの組み合わせです。
C
は、数値を通貨としてフォーマットする標準の数値フォーマット指定子です。このフォーマット指定子を使用する場合、正確な出力はカルチャによって決定されます。これは、文化が異なれば、通貨の金額を表示するために異なる規則を使用するためです。カルチャは、使用される実際の通貨記号、その配置、および負の値の表示方法を決定します。
カルチャを指定しない場合は、現在のセッションの言語が使用されます。これは通常、ユーザーのデフォルト言語ですが、SET LANGUAGE
を使用して変更することもできます。 ステートメント。
例2–条件付き書式
標準形式の文字列で必要な結果が得られない場合は、代わりにカスタムの数値形式の文字列を使用する必要があります。
カスタム数値形式の文字列を使用して結果を括弧で囲む例を次に示します。
SELECT FORMAT(-123, '0; (0)') Result;
結果:
+----------+ | Result | |----------| | (123) | +----------+
必要な結果を得るには、フォーマット文字列はセクションセパレータを使用して条件付きフォーマットを提供します。
条件付き書式は、特定の条件に応じて異なる書式を指定する場所です。 FORMAT()
を使用する場合 関数では、条件付き書式を使用して、数値が正、負、またはゼロのいずれであるかに応じて、数値に異なる書式を適用できます。
このコンテキストでは、条件付き書式はセミコロン(;
)によって可能になります。 )。これは「セクションセパレータ」と呼ばれます。この場合、(ネガティブと非ネガティブを区別するために)2つのセクションのみが必要なため、セミコロンを1つだけ使用しました。
2つのセクションのみが含まれる場合、最初のセクションは正の値とゼロの両方に適用されます。 2番目のセクションは、負の値に適用されます。別のセミコロンを追加して、ゼロだけに別の形式を指定することもできます(詳細は以下を参照)。
例3–正およびゼロとの比較
別の例を次に示します。今回は、正の値とゼロを含めます(ポイントをより明確に示すため)。
SELECT FORMAT(-123, '0; (0)') Negative, FORMAT(123, '0; (0)') Positive, FORMAT(0, '0; (0)') Zero;>
結果:
+------------+------------+--------+ | Negative | Positive | Zero | |------------+------------+--------| | (123) | 123 | 0 | +------------+------------+--------+
例4–代替フォーマット
かっこだけに限定されません。たとえば、中かっこ、角かっこ、またはほとんど何でも使用できます。
SELECT FORMAT(-123, '0; {0}') R1, FORMAT(-123, '0; [0]') R2, FORMAT(-123, '0; WARNING! NEGATIVE VALUE!!!') R3;
結果:
+--------+--------+-----------------------------+ | R1 | R2 | R3 | |--------+--------+-----------------------------| | {123} | [123] | WARNING! NEGATIVE VALUE!!! | +--------+--------+-----------------------------+
例5–3つの条件
前述のように、ゼロに個別のフォーマットを提供するために、3番目の条件を追加することもできます。簡単な例を次に示します。
SELECT FORMAT(-123, '0; (0); 0 (Zero)') R1, FORMAT(123, '0; (0); 0 (Zero)') R2, FORMAT(0, '0; (0); 0 (Zero)') R3;
結果:
+--------+------+-----------+ | R1 | R2 | R3 | |--------+------+-----------| | (123) | 123 | 0 (Zero) | +--------+------+-----------+
例6–マイナス記号はどこにありますか?
マイナス記号が負の値にも表示されていないことに気付いたかもしれません。これは、セクションセパレータが値の既存のフォーマット(マイナス記号を含む)を無視するためです。つまり、条件付き書式を使用していて、実際に負の値にマイナス記号が必要な場合は、それを書式文字列に追加する必要があります。
SELECT FORMAT(-123, '0; 0 (Negative); 0 (Zero)') 'Without Minus Sign', FORMAT(-123, '0; -0 (Negative); 0 (Zero)') 'With Minus Sign';
結果:
+----------------------+-------------------+ | Without Minus Sign | With Minus Sign | |----------------------+-------------------| | 123 (Negative) | -123 (Negative) | +----------------------+-------------------+
ただし、マイナス記号がそのまま残る場合があります(少なくとも私のシステムでは):
SELECT FORMAT(123, '0;; 0 (Zero)') Positive, FORMAT(-123, '0;; 0 (Zero)') Negative;
結果:
+------------+------------+ | Positive | Negative | |------------+------------| | 123 | -123 | +------------+------------+
この例では、負の値と正の値が同じセクションを共有しています。これは、負の値のセクションセパレータを追加したが、空のままにしたためです。この場合、最初のセクションのフォーマット文字列は、正のとの両方に適用されます。 負の値。
前述のように、この場合、負の値の場合、マイナス記号はそのまま残ります。