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

PostgreSQLで文字列を数値に変換する方法

    問題:

    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のドキュメントで、より多くの数値フォーマット情報を見つけることができます。


    1. MySQLを使用して2つの日付の間でクエリを実行するにはどうすればよいですか?

    2. Postgresql COPY TO STDIN with CSVは、競合時にどのように更新しますか?

    3. psql:致命的:ロールpostgresは存在しません

    4. SQL Serverで文字列のすべての出現箇所を別の文字列に置き換える方法– REPLACE()