psqlでストアドファンクションを作成しているのですが、
select文内でcount()を使用しております。
諸事情で画面側に表示する型がnumericにしており、count()の値をそのまま画面側に出そうとすると
bigint型が期待しているnumeric型と一致しないと出ます。
公式リファレンスでcount()の戻り値はbigintであるとわかったのですが、
数値型→数値型での変換については記載がありませんでした。
cast()を使用しても,の部分で構文エラーと出ているので、他にいい方法がないかお力添えいただきたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
cast()を使用しても,の部分で構文エラーと出ているので、他にいい方法がないかお力添えいただきたいです。
castの記述が誤っているだけだと思います。
CAST ( expression AS type )
expression::type
記述としては以下ですね。
SQL
1select count(~) ::numeric 2-- または 3select cast(count(~) as numeric)
投稿2021/09/18 03:22
総合スコア25327
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
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総合スコア335
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。