PostgreSQLでは、to_number()
を使用できます 文字列を数値に変換する関数。
具体的には、数値の文字列表現を数値に変換します。
たとえば、$1,234.50
がある場合 文字列として、to_number()
を使用できます これを数値を使用する実際の数値に変換します データ型。
構文
構文は次のようになります:
to_number(text, text)
ここで、最初の引数は数値の文字列表現であり、2番目の引数は最初の引数が使用するテンプレートを定義します。
例
これがデモンストレーションの基本的な例です。
SELECT to_number('80', '99');
結果:
80
この場合、99
を使用しました テンプレートとして。各9
「テンプレートパターン」と呼ばれます。 9
テンプレートパターンは数字の位置を表します。両方の数字を含めたかったので、2つ使用しました。
9
の1つを削除するとどうなりますか s。
SELECT to_number('80', '9');
結果:
8
したがって、テンプレートに正しい数のテンプレートパターンを含めることが重要です。
グループ区切り文字と小数点
大きい数値や小数秒の数値を操作する場合は、グループの区切り文字や小数点を指定するテンプレートパターンを含める必要があります。
これを行うには2つの方法があります。
最初のオプションは、文字通りコンマと小数点を入力することです。
SELECT to_number('7,000.25', '9,999.99');
結果:
7000.25
2番目のオプションは、ロケール対応バージョンを使用することです。これらは、グループ区切り文字(千単位の区切り文字)を表すGと、小数点を表すDです。
したがって、前の例は次のように書き直すことができます。
SELECT to_number('7,000.25', '9G999D99');
結果:
7000.25
通貨記号
L
テンプレートパターンは、ロケールに対応した通貨記号を表します。
SELECT to_number('$7,000.25', 'L9G999D99');
結果:
7000.25
リターンタイプ
to_number()
の戻り値 関数は数値です。
pg_typeof()
で返品タイプを確認できます 機能。
SELECT pg_typeof(to_number('$7,000.25', 'L9G999D99'));
結果:
numeric
予期しない結果?
テンプレートを正しく作成することが重要です。そうしないと、予期しない結果になる可能性があります。
L
を含めるのを忘れた場合の例を次に示します。 前の例のテンプレートパターン。
SELECT to_number('$7,000.25', '9G999D99');
結果:
7000
L
を含めるのを忘れたので テンプレートパターン(通貨の場合)。これにより、テンプレート全体が数値と同期しなくなり、G
になりました。 D
と同様に、無視されます 。
明確にするために、正しいテンプレートと比較した場合もここにあります。
SELECT
to_number('$7,000.25', 'L9G999D99') AS "Right",
to_number('$7,000.25', '9G999D99') AS "Wrong";
結果:
Right | Wrong ---------+------- 7000.25 | 7000
to_number()とcast()
to_number()
関数は、主に単純なキャストでは変換できない入力形式を処理するために提供されています。したがって、通常、標準の数値表現には不要です。
したがって、このページの最初の例は、cast()
を使用して実行できた可能性があります。 。
SELECT cast('80' AS NUMERIC);
結果:
80
しかし、事態が少し複雑になると、問題が発生し始めます。
SELECT cast('$7,000.25' AS NUMERIC);
結果:
ERROR: invalid input syntax for type numeric: "$7,000.25" LINE 1: SELECT cast('$7,000.25' AS NUMERIC);
したがって、to_number()
主にこのような状況向けに設計されました。
テンプレートパターンと修飾子の完全なリスト
Postgresには、さらに多くのテンプレートパターンと修飾子が含まれています。
これらは、数値をフォーマットするときにも使用できます(たとえば、to_char()
を使用する場合 数値のフォーマットされた文字列表現を返す関数)。
完全なリストについては、PostgreSQLでの数値フォーマット用のテンプレートパターンと修飾子を参照してください。