PostgreSQL で 数値の小数点以下の 0 を削る

メモです。
(使用している PostgreSQL は PostgreSQL 9.3.12 です)

列の型が "NUMERIC(10,4)" のような場合 そのまま SQL でデータを取得すと "123456" が "123456.0000" のように取得されます。

今回は、小数点以下の 0 を削る方法です。

以下の SQL で テーブルとデータを作成します。

CREATE TABLE table1 (
        field1  NUMERIC(10,4)
);
INSERT INTO table1 (field1)
    VALUES (123456.0000)
         , (123456.5000)
         , (123456.0500)
         , (123456.0050)
         , (123456.0005);

SQL を実行。

db=# CREATE TABLE table1 (
db(#         field1  NUMERIC(10,4)
db(# );

CREATE TABLE
db=# INSERT INTO table1 (field1)
db-#     VALUES (123456.0000)
db-#          , (123456.5000)
db-#          , (123456.0500)
db-#          , (123456.0050)
db-#          , (123456.0005);

INSERT 0 5

まずは 普通にデータを取得してみます。

db=# SELECT field1
db-# FROM table1;

   field1
-------------
 123456.0000
 123456.5000
 123456.0500
 123456.0050
 123456.0005
(5 rows)

小数点以下に 0 が 続いていますね。

可変精度の "DOUBLE PRECISION" 型に キャストします。

PostgreSQL のキャストは セミコロン 2 つです。

xxxx::DOUBLE PRECISION

次の SQL で そのままの取得(field1)と キャストして取得(field1+)を比較してみます。

db=# SELECT field1
db-#      , field1::DOUBLE PRECISION AS "field1+"
db-# FROM table1;

   field1    |   field1+
-------------+-------------
 123456.0000 |      123456
 123456.5000 |    123456.5
 123456.0500 |   123456.05
 123456.0050 |  123456.005
 123456.0005 | 123456.0005

小数点以下の 0 が 削れていますね。

これは プログラム言語でも よくある方法です。

ただし、"DOUBLE PRECISION" は 不正確な可変精度の数値データ型ですので 精度の問題には注意する必要があります。

[参考]
8.1. 数値データ型 - PostgreSQL 9.3.2文書

Google サイト内検索

Amazonアソシエイト