問題:
PostgreSQLで文字列を10進値に変換したい。
文字列の値をDECIMALデータ型に変換してみましょう。
ソリューション1:
::演算子を使用します。作成するクエリは次のとおりです。
SELECT ' 5800.79 '::DECIMAL;
結果は次のとおりです。
数値 |
---|
5800.79 |
お気づきのとおり、先頭と末尾のスペースが削除されました。
ディスカッション:
::演算子を使用して、数値を含む文字列をDECIMALデータ型に変換します。この例では、文字列「5800.79」を5800.79(DECIMAL値)に変換しました。
この演算子は、異なるデータ型間で変換するために使用されます。 PostgreSQL内で非常に人気があります。標準のSQL演算子であるCAST()
を使用することもできます 、::
の代わりに オペレーター。
ソリューション2:
SELECT CAST(' 5800.79 ' AS DECIMAL );
結果は次のとおりです。
数値 |
---|
5800.79 |
CAST()
に注意してください 、::
のように 演算子。文字列を数値に変換する前に、文字列の最初と最後にある追加のスペースを削除します。
PostgreSQLデータベースは、変換するもう1つの方法を提供します。 TO_NUMBER()
を使用します より複雑な文字列を変換する必要がある場合に機能します。この関数は、変換する文字列と、文字列内の各文字をどのように解釈するかを示すフォーマットマスクの2つの引数を取ります。以下の例を参照してください:
ソリューション3:
SELECT TO_NUMBER(' 5 800,79- ', 'FM9G999D99S' );
結果は次のとおりです。
数値 |
---|
-5800.79 |
フォーマット文字列は、数値を含む文字列を記述します(文字列として入力値)。この例では、このマスクに記号「FM」が含まれています。これにより、先頭と末尾のスペースが削除されます。 「9」は1桁(この例では5)を示し、「G」は数字のグループを表します(この例では、1つのスペースは数千のグループを示します)。
次に、「999」はさらに3桁(800)を示します。
「D」記号は、小数点マーカー(ここでは、ポイント/ドット「。」)を指定します。小数点記号の後には「99」、つまり2桁の小数桁が続きます。
最後の記号「S」は、プラス記号またはマイナス記号の使用を指定します(数値が負であるため、マイナスになります)。
このマスクで最もよく使用される記号は次のとおりです。
symbol | 説明 |
---|---|
FM | 先行ゼロとパディングブランク |
9 | 1桁 |
。 | ローカル小数点 |
G | グループセパレータ |
D | ローカル小数点 |
S | マイナスまたはプラス記号 |
L | 現地通貨記号 |
PostgreSQLのドキュメントで、より多くの数値フォーマット情報を見つけることができます。