2020/09/14
Postgresで四捨五入をする
概要
Postgreqlに格納されたデータに小数点の計算誤差があったため、一括で(小数点第1位まで)四捨五入してデータをパッチする必要があったため、調査して実施しました。
(Postgreqlはv12を使っています。)
SQL
mytable.my_column
は double precision型です。
「(算術関数と演算子)」によると、round(v numeric, s int)
を使えば良さそうなので
update my_table set my_column = round(my_column, 1);
を実行してみたところ・・以下のエラーが・・
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
どうやら、castして、numeric型に変換してからroundしないといけないようでした。。。
update my_table set my_column = round(CAST(my_column as numeric), 1);
こちらでちゃんと動きました。
ちなみに update する前にちゃんとデータを確認する必要があるので、以下のような感じでリストアップしておくと良かったです。
select
id
, my_column as current_value
, round(CAST(my_column as numeric), 1) as patched_value
from
my_table;
以上です。
関連する記事
psqlコマンドを使い、SQLファイルを実行して、csv/tsvに結果を出力する
postgresqldbサーバーにログインして、SQLファイルを実行して結果をcsv/tsvに出力する方法です。
[Rust][Psql]Dieselのよくやる使い方まとめ
Rust Dieselのよくやる使い方をまとめてみました
POSTGRESQLで行更新時に自動で更新日時を設定する
TRIGGERを使って、行更新時に更新日時を特定のフィールドに設定できるようにしました
Rust dieselでpostgresqlのjson型を使う
dieselでpostgresqlのjson型のフィールドに対するクエリができるようにしました