teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

SQL文にpg_typeof関数の記述を追記

2021/09/17 06:44

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -3,14 +3,11 @@
3
3
  > bigint型が期待しているnumeric型と一致しないと出ます。
4
4
  > 数値型→数値型での変換については記載がありませんでした。
5
5
 
6
- 値の上限値をDBAが制御できない関数に対する戻り値の型を
7
- ダイレクトにキャストしようとしていることが原因だと思います。
8
-
9
6
  数値型(`固定`) → 文字列型 → 数値型(`任意`)
10
7
  という方式のキャストでどうでしょうか。以下サンプルです。
11
8
 
12
9
  ```SQL
13
- CREATE TABLE jaxxaxa
10
+ CREATE TABLE sample
14
11
  (
15
12
  seq serial primary key
16
13
  , cid int not null
@@ -19,7 +16,7 @@
19
16
  , qua float not null
20
17
  );
21
18
 
22
- INSERT INTO jaxxaxa
19
+ INSERT INTO sample
23
20
  ( cid, ymd, item, qua )
24
21
  VALUES
25
22
  ( 1, '2021-09-01', 'A', 10 )
@@ -52,7 +49,7 @@
52
49
  , (
53
50
  count(1) over( order by t.ymd )
54
51
  )::varchar::numeric
55
- FROM jaxxaxa t
52
+ FROM sample t
56
53
  WHERE t.cid = ANY ( $1 )
57
54
  GROUP BY 1
58
55
  )
@@ -62,18 +59,23 @@
62
59
  LANGUAGE PLpgSQL;
63
60
 
64
61
 
62
+ SELECT ymd
63
+ , g_count
64
+ , d_count
65
+ , pg_typeof( g_count ) g_type
66
+ , pg_typeof( d_count ) d_type
65
- SELECT * FROM hoge( array[1,2] )
67
+ FROM hoge( array[1,2] )
66
68
  ORDER BY d_count ;
67
69
  ```
68
70
 
69
71
 
70
72
  ```result
71
- ymd | g_count | d_count
73
+ ymd | g_count | d_count | g_type | d_type
72
- ------------+---------+---------
74
+ ------------+---------+---------+---------+---------
73
- 2021-09-01 | 3 | 1
75
+ 2021-09-01 | 3 | 1 | numeric | numeric
74
- 2021-09-02 | 1 | 2
76
+ 2021-09-02 | 1 | 2 | numeric | numeric
75
- 2021-09-03 | 1 | 3
77
+ 2021-09-03 | 1 | 3 | numeric | numeric
76
- 2021-09-04 | 2 | 4
78
+ 2021-09-04 | 2 | 4 | numeric | numeric
77
- 2021-09-05 | 1 | 5
79
+ 2021-09-05 | 1 | 5 | numeric | numeric
78
- 2021-09-06 | 1 | 6
80
+ 2021-09-06 | 1 | 6 | numeric | numeric
79
81
  ```

2

2021/09/17 06:44

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -6,7 +6,7 @@
6
6
  値の上限値をDBAが制御できない関数に対する戻り値の型を
7
7
  ダイレクトにキャストしようとしていることが原因だと思います。
8
8
 
9
- 数値型(``) → 文字列型 → 数値型(``)
9
+ 数値型(`固定`) → 文字列型 → 数値型(`任意`)
10
10
  という方式のキャストでどうでしょうか。以下サンプルです。
11
11
 
12
12
  ```SQL

1

一部文言を変更

2021/09/17 05:03

投稿

mayu-
mayu-

スコア335

answer CHANGED
@@ -3,10 +3,8 @@
3
3
  > bigint型が期待しているnumeric型と一致しないと出ます。
4
4
  > 数値型→数値型での変換については記載がありませんでした。
5
5
 
6
- 値の上限値をDBAが制御できない関数
6
+ 値の上限値をDBAが制御できない関数に対する戻り値の型を
7
- に対する戻り値の型を
8
- 同型かつ精度が低い型へダイレクトにキャストしようとしていることが
7
+ ダイレクトにキャストしようとしていることが原因だと思います。
9
- 原因だと思います。
10
8
 
11
9
  数値型(`高`) → 文字列型 → 数値型(`低`)
12
10
  という方式のキャストでどうでしょうか。以下サンプルです。