いつもお世話になっております。
PL/pgSQLについて、質問がございます。
画面側→SQLにパラメータが渡され、そのパラメータを使用してwhere句の条件に取り込みたいのですが
画面側から受け取ったパラメータが改行とtabが入っておりそのままでは使用が難しく
適切なSQL文の書き方がはっきりと思い浮かばないです。
<パラメータの内容>
$1 = '1
(改行)(tab)2
(改行)(tab)3'
現状のPL/pgSQLの内容としては以下の通りです。
SQL
1CREATE OR REPLACE FUNCTION postgres.a_func(p1 varchar) 2RETURNS TABLE ( 3 COLM_1 VARCHAR 4) 5DECLARE 6 p text; 7 u1 text[]; 8 s text; 9AS' 10BEGIN 11 --パラメータを変数に代入 12 p := p1 13 --変数をstring_to_array()で文字列を配列に一度変換 14 u1 := string_to_array(p, chr(10)) --改行・tabをなくして配列に変換['1','2','3']できれば 15 --配列に変換した後、文字列に変換 16 s := array_to_string(u1,',') --'1,2,3'になっている想定 17 18 RETURN QUERY 19 SELECT 20 b 21 FROM 22 テーブル 23 WHERE 24 cast(id,varchar) IN (u1) --IN句を使用して複数パラメータが渡った時に対応できるようにする 25END; 26' 27LANGUAGE PLPGSQL;
テーブル構造はシンプルで以下の通りになっております。
|id(int)|b(varchar)|
|1 |ああ |
|2 |いい |
|3 |うう |
独力で調べてみて、array_to_string,string_to_arrayというのが使えそうだなと思い取り入れようとしたのですが
u1 := string_to_array(p, chr(10)) --改行・tabをなくして配列に変換['1','2','3']できれば
ここの改行・tabスペースを変換する箇所でどのように記述すればコメントのような変換ができるのかがわからないです。
\r\n\tみたいな改行コードを使用するのではなくCHR(10),CHR(9)と書く的なことが記していたので
string_to_array(p,CHR(10),CHR(9))と書くのでしょうか?
string_to_arrayを使用する際、改行・tabスペースが入った文字列を変換するような内容が調べても出てこなかったので
ご教授頂きたいです。
使用DBはpostgres12です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。