- PR -

PostgreSQL 8.0 列が保持する小数点位置の取得

1
投稿者投稿内容
beck
常連さん
会議室デビュー日: 2004/04/14
投稿数: 24
投稿日時: 2005-10-20 11:36
いつもお世話になっています。
さっそくですが、numeric型の列の定義で長さを10,精度を5とし追加し、この列の小数点位置を取得したいのですが、どのようにして小数点位置を取得できるのでしょうか?
pg_catalogスキーマの各テーブルを調べても見当たりませんでした。リファレンスを見てもヒントになる文章が見当たりません。
 ご存知の方がいらっしゃれば、ご教授いただきたいです。よろしくお願いします。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-10-20 12:45
http://www.shonan.ne.jp/~nkon/study/catalog/catalogtest.html
に載っていたやり方でできるのではないでしょうか?

オレの環境(Postgres8.0)を用いて
(pg_attribute.atttypmod-4) / 65536 で長さが取得でき、
((pg_attribute.atttypmod-4) % 65536) で精度が取得できるのは
確認しました。
beck
常連さん
会議室デビュー日: 2004/04/14
投稿数: 24
投稿日時: 2005-10-22 11:13
夏椰さん、ご返答ありがとうございます。
リンクされていたページで紹介されている方法で長さ、精度を取得することが出来ました。
取得方法は下記の通りです。

select
(pg_attribute.atttypmod-4) / 65536 as 桁数,
((pg_attribute.atttypmod-4) % 65536) as 精度
from pg_attribute
where
attrelid = '356555' and -------------- 列が所属するテーブルのオブジェクトID
atttypid = '1700' and -------------- データ型のオブジェクトID
attstattarget = '-1' -------------- 列の統計情報

夏椰さん、ご教授いただき、ほんとうにありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)