スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PL/pgSQLでlikeのエスケープ

以前PostgreSQLのlikeのエスケープにJavaPHPで書きましたが、よく考えたらPL/pgSQLでやっちゃった方が簡単な気がして作って見ました。
これをやらないと検索で「_」や「%」を入れられるとおかしな挙動になるので注意です。

-- 文字列をLIKE用にエスケープする
-- 引数
-- p_src : 元の文字列
-- p_left : 左に%を入れるか
-- p_right : 右に%を入れるか
-- 戻り値
-- エスケープされた文字列
CREATE OR REPLACE FUNCTION uv_like_escape(
p_src TEXT
,p_left BOOLEAN DEFAULT TRUE
,p_right BOOLEAN DEFAULT TRUE
) RETURNS TEXT AS $$
DECLARE
BEGIN
RETURN
CASE WHEN p_left THEN '%' ELSE '' END ||
replace(replace(p_src, '_', '\_'), '%', '\%') ||
CASE WHEN p_right THEN '%' ELSE '' END;
END;
$$ LANGUAGE plpgsql;


SELECT user_name FROM t_user WHERE user_name like uv_like_escape('_');
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。