【PostgreSQL】2つの文字列を比較して一致するかチェックする
2つの文字列を比較して一致するかチェックする関数
2つの文字列を比較して一致するかチェックする関数です。
※ 小文字大文字、半角全角が異なっても一致と判定するので、判定は適宜変更してください。
例
"postgresql"と"PostgreSQL" ⇒ true(一致)
"postgresql"と"postgresql" ⇒ true(一致)
"postgresql"と"postgreSQL" ⇒ true(一致)
"postgresql"と"oracle" ⇒ false(不一致)
引数
引数1(character varying):比較する文字列1
引数2(character varying):↑と比較する文字列2
返り値
true:一致する、false:一致しない
コード
CREATE OR REPLACE FUNCTION check_same_character(
c_target character varying,
c_comparison character varying)
RETURNS boolean
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
declare
BEGIN
--1.trim
c_target = trim(c_target);
c_comparison = trim(c_comparison);
--2.大文字へ変換、3.半角を全角に変換する
c_target = translate(upper(c_target), '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ', '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ');
c_comparison = translate(upper(c_comparison), '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ', '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ');
--4.ロケールが「C」の時、全角小文字がupperされないためここで変換
c_target = translate(c_target, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ');
c_comparison = translate(c_comparison, 'abcdefghijklmnopqrstuvwxyz ', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ ');
--一致かの判定
if c_target = c_comparison then
--一致する
return true;
else
--一致しない
return false;
end if;
END;
$BODY$;
※PostgreSQL9.5 , 9.6 , 10 , 11 , 12で動作確認済み 自作関数の実行方法はこちら
実行例
-- 「小文字」と「小文字大文字混合」の比較
select check_same_character('postgresql','PostgreSQL'); --【結果】:true
-- 「小文字(半角)」と「小文字(全角)」の比較
select check_same_character('postgresql','postgresql'); --【結果】:true
-- 「小文字(半角)」と「小文字大文字混合(全角)」の比較
select check_same_character('postgresql','postgreSQL'); --【結果】:true
-- 全く異なる文字列の比較
select check_same_character('postgresql','oracle'); --【結果】:false