質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

3回答

1708閲覧

bigint型→numeric型に変換できないか

jaxxaxa

総合スコア10

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2021/09/17 02:46

psqlでストアドファンクションを作成しているのですが、
select文内でcount()を使用しております。
諸事情で画面側に表示する型がnumericにしており、count()の値をそのまま画面側に出そうとすると
bigint型が期待しているnumeric型と一致しないと出ます。

公式リファレンスでcount()の戻り値はbigintであるとわかったのですが、
数値型→数値型での変換については記載がありませんでした。
cast()を使用しても,の部分で構文エラーと出ているので、他にいい方法がないかお力添えいただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/09/17 04:26

そのコードと、エラーメッセージを提示しよう
guest

回答3

0

ベストアンサー

cast()を使用しても,の部分で構文エラーと出ているので、他にいい方法がないかお力添えいただきたいです。

castの記述が誤っているだけだと思います。

4.2.9. 型キャスト

CAST ( expression AS type )
expression::type

記述としては以下ですね。

SQL

1select count() ::numeric 2-- または 3select cast(count() as numeric)

投稿2021/09/18 03:22

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

count(*) + 0.0 で、numericになります。

投稿2021/09/17 07:46

YT0014

総合スコア1750

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

select文内でcount()を使用しております。
count()の値をそのまま画面側に出そうとすると
bigint型が期待しているnumeric型と一致しないと出ます。
数値型→数値型での変換については記載がありませんでした。

数値型(固定) → 文字列型 → 数値型(任意)
という方式のキャストでどうでしょうか。以下サンプルです。

SQL

1CREATE TABLE sample 2( 3 seq serial primary key 4 , cid int not null 5 , ymd date not null 6 , item varchar(10) not null 7 , qua float not null 8); 9 10INSERT INTO sample 11 ( cid, ymd, item, qua ) 12VALUES 13 ( 1, '2021-09-01', 'A', 10 ) 14 , ( 1, '2021-09-01', 'B', 4 ) 15 , ( 1, '2021-09-02', 'D', 2 ) 16 , ( 1, '2021-09-05', 'A', 7 ) 17 , ( 2, '2021-09-01', 'D', 1 ) 18 , ( 2, '2021-09-03', 'F', 2 ) 19 , ( 2, '2021-09-04', 'U', 5 ) 20 , ( 2, '2021-09-04', 'V', 11 ) 21 , ( 2, '2021-09-06', 'E', 9 ) 22 , ( 3, '2021-09-01', 'Q', 55 ) 23; 24 25CREATE OR REPLACE FUNCTION hoge 26 ( cid_arr int[] ) 27 RETURNS TABLE 28 ( 29 ymd date 30 , g_count numeric 31 , d_count numeric 32 ) 33AS 34$$ 35BEGIN 36 RETURN QUERY 37 ( 38 SELECT t.ymd 39 , count(1)::varchar::numeric 40 , ( 41 count(1) over( order by t.ymd ) 42 )::varchar::numeric 43 FROM sample t 44 WHERE t.cid = ANY ( $1 ) 45 GROUP BY 1 46 ) 47 ; 48END 49$$ 50LANGUAGE PLpgSQL; 51 52 53SELECT ymd 54 , g_count 55 , d_count 56 , pg_typeof( g_count ) g_type 57 , pg_typeof( d_count ) d_type 58FROM hoge( array[1,2] ) 59ORDER BY d_count ;

result

1 ymd | g_count | d_count | g_type | d_type 2------------+---------+---------+---------+--------- 3 2021-09-01 | 3 | 1 | numeric | numeric 4 2021-09-02 | 1 | 2 | numeric | numeric 5 2021-09-03 | 1 | 3 | numeric | numeric 6 2021-09-04 | 2 | 4 | numeric | numeric 7 2021-09-05 | 1 | 5 | numeric | numeric 8 2021-09-06 | 1 | 6 | numeric | numeric

投稿2021/09/17 04:55

編集2021/09/17 06:44
mayu-

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問