メモです。
(使用している 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" は 不正確な可変精度の数値データ型ですので 精度の問題には注意する必要があります。