1. ホーム
  2. データベース
  3. ポストグレスキュー

PostgreSQLで文字列が対象の文字列を含むかどうかを判断する様々な方法

2022-01-10 16:38:07

PostgreSQLには、文字列が含まれているかどうかを判断する方法がいくつかあります。

方法1:position(string内の部分文字列):

position(substring in string)関数:パラメータ1:対象文字列、パラメータ2:元の文字列、対象文字列を含む場合、対象文字列の最初の出現位置を返す、戻り値が0より大きいかどうかで対象文字列を含むかどうかを判断することができます。

select position('aa' in 'abcd');
 position 
----------
    0
select position('ab' in 'abcd');
 position 
----------
    1
select position('ab' in 'abcdab');
 position 
----------
    1

方法2:strpos(文字列, 部分文字列)

strpos(string, substring) function: parameter one: original string, target string, the position of the declared substring, the role is same as the position function.strpos(string,substring)関数: パラメータ1: original string, target string, the position of the declaration substring.

select position('abcd','aa');
 position 
----------
    0

select position('abcd','ab');
 position 
----------
    1

select position('abcdab','ab');
 position 
----------
    1

方法3:正規表現を使う

対象の文字列が含まれていればt、含まれていなければfを返す

select 'abcd' ~ 'aa' as result;
result
------
  f 
   
select 'abcd' ~ 'ab' as result;
result
------
  t 
   
select 'abcdab' ~ 'ab' as result;
result
------
  t 

方法4:配列に@>演算子を使う(含まれているかどうかが正確にわからない)

select regexp_split_to_array('abcd','') @> array['b','e'] as result;
result
------
 f

select regexp_split_to_array('abcd','') @> array['a','b'] as result;
result
------
 t

以下の例に注目してください。

select regexp_split_to_array('abcd','') @> array['a','a'] as result;
result
----------
 t

select regexp_split_to_array('abcd','') @> array['a','c'] as result;
result
----------
 t

select regexp_split_to_array('abcd','') @> array['a','c','a','c'] as result;
result
----------
 t

このように、配列の包含演算子は、包含されていれば順序や繰り返しに関係なく真を返しますので、実際に使用する際には注意してください。

PostgreSQLで対象の文字列を含むかどうかを判断する方法は以上です。PostgreSQLで文字列を判定する方法については、BinaryDevelopの過去の記事を検索するか、以下の記事を引き続き閲覧してください。