【PostgreSQL】2つの文字列を比較して一致するかチェックする

2020年11月22日PostgreSQL自作関数

スポンサーリンク

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

 

PostgreSQLの構文まとめを書いています

「基本構文・こんな時どう書くんだっけ?」のまとめ