PostgreSQLでは、to_char()
を使用できます 数値を特定の形式で出力します。これには、正の数か負の数かを示すプラスまたはマイナス記号が含まれます。
これを行うには、S
のいずれかを使用します 、MI
、PL
、またはSG
フォーマット文字列で。
別のオプションは、PR
を使用することです 負の値を山括弧で囲むため。
符号付き数値のテンプレートパターン
次のテンプレートパターンを使用して、番号に適切な符号を適用できます。
パターン | 説明 |
---|---|
MI | 指定された位置のマイナス記号(数値が0未満の場合)。 |
PL | 指定された位置にプラス記号を入力します(数値が0より大きい場合)。 |
SG | 数値が正か負かに応じて、指定された位置にプラスまたはマイナス記号が表示されます。 |
S | 番号に固定された記号(ロケールを使用)。 |
PR | これは、すべての負の値を山括弧で囲みます。 |
MI
に注意してください 、PL
、またはSG
Postgres拡張機能です(標準のSQLではありません)。
Sを使用した例
S
を示す例を次に示します。 パターン。
SELECT to_char(1, 'S9');
結果:
+1
この場合、数値は正であるため、私のロケールを使用すると、プラス記号が付加されます。
ここでもそうですが、3つの値があります。正、負、ゼロ。
SELECT
to_char(1, 'S9') AS "1",
to_char(-1, 'S9') AS "-1",
to_char(0, 'S9') AS "0";
結果:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
SGの使用例
SG
の同じ例を次に示します。 パターン。
SELECT
to_char(1, 'SG9') AS "1",
to_char(-1, 'SG9') AS "-1",
to_char(0, 'SG9') AS "0";
結果:
1 | -1 | 0 ----+----+---- +1 | -1 | +0
MIの使用例
SG
を交換するとどうなりますか MI
を使用 。
SELECT
to_char(1, 'MI9') AS "1",
to_char(-1, 'MI9') AS "-1",
to_char(0, 'MI9') AS "0";
結果:
1 | -1 | 0 ----+----+---- 1 | -1 | 0
負の数のみがマイナス記号を取得します。正の数とゼロには符号がありません。
PLを使用した例
PL
を使用した場合のシステムの出力は次のとおりです。 。
SELECT
to_char(1, 'PL9') AS "1",
to_char(-1, 'PL9') AS "-1",
to_char(0, 'PL9') AS "0";
結果:
1 | -1 | 0 -----+-----+----- + 1 | -1 | + 0
PRの使用例
PR
を使用したときのシステムの出力は次のとおりです 。
SELECT
to_char(1, '9PR') AS "1",
to_char(-1, '9PR') AS "-1",
to_char(0, '9PR') AS "0";
結果:
1 | -1 | 0 -----+-----+----- 1 | <1> | 0
PR
に注意してください 後に来る必要があります 9
。
9
の前に配置しようとするとどうなりますか :
SELECT
to_char(1, 'PR9') AS "1",
to_char(-1, 'PR9') AS "-1",
to_char(0, 'PR9') AS "0";
結果:
ERROR: "9" must be ahead of "PR"
SG対S
SG
を使用した例に気づいたかもしれません。 およびS
同じ結果を出力しているように見えるので、それらの違いは何でしょうか。
違いは、S
SG
が番号に固定されているのに対し、 、MI
、PL
そうではありません。
S
ロケールも使用するため、実際に使用される記号はロケールによって異なります。
アンカーの違いを示す例を次に示します。
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG";
結果:
S | SG ------+------ +1 | + 1
そして、数が増えると次のようになります。
SELECT
to_char(1, 'S999') AS "S",
to_char(1, 'SG999') AS "SG",
to_char(10, 'S999') AS "S",
to_char(10, 'SG999') AS "SG",
to_char(100, 'S999') AS "S",
to_char(100, 'SG999') AS "SG";
結果:
S | SG | S | SG | S | SG ------+------+------+------+------+------ +1 | + 1 | +10 | + 10 | +100 | +100