PostgreSQL では、split_part() 関数を使用して、指定された区切り文字で文字列を分割し、分割された文字列の特定の部分を返します。split_part() は、必要な部分を文字列として直接返します。

SPLIT_PART() の構文:

SPLIT_PART(string, delimiter, field)

string: 分割する文字列。

delimiter: 分割に使用される区切り文字列。

field: 返される部分の位置 (1 から始まるインデックス)。1 番目の部分、2 番目の部分など

例 1: 文字列を分割して特定の部分を取得する

文字列 ‘SQL,Python,PostgreSQL’ をカンマ (,) で分割し、3 番目の部分を取得するには、次のようにします。

SELECT SPLIT_PART('SQL,Python,PostgreSQL', ',', 3) AS part;

出力:

PostgreSQLの列の文字列分割 - split_part() 1

例 2: PostgreSQL テーブルの列の値を分割する

「employees」テーブルを使用します。

PostgreSQLの列の文字列分割 - split_part() 2

SPLIT_PART() 関数を使用して、従業員テーブルの「ename」列から名前を抽出してみましょう。

SELECT *, SPLIT_PART(ename, ' ', 1) AS first_name
FROM employees;

split_part()関数の引数1は最初の部分を示すので、名前が取得されます。

出力:

PostgreSQLの列の文字列分割 - split_part() 3

SPLIT_PART() 関数を使用して、従業員テーブルの「ename」列から 2 番目の名前を抽出してみましょう。

SELECT *, SPLIT_PART(ename, ' ', 2) AS second_name
FROM employees;

split_part()関数の引数2は2番目の部分を示すので、姓を取得します。

出力:

PostgreSQLの列の文字列分割 - split_part() 4

SPLIT_PART() 関数を使用して、従業員テーブルの「ename」列から名と姓の両方を抽出してみましょう。

select *,split_part(ename,' ',1) as first_name, split_part(ename,' ',2) as second_name  
from employees

ename列をfirst_nameとlast_nameに分割したので、結果のテーブルは次のようになります。

出力:

PostgreSQLの列の文字列分割 - split_part() 5

例 3: PostgreSQL テーブルの列の値を分割する

使用するのは  employees_email テーブル

PostgreSQLの列の文字列分割 - split_part() 6

SPLIT_PART() 関数を使用して、employees_email テーブルの “email” 列から区切り文字 “@” の両側を抽出してみましょう。

select *,split_part(email,'@',1) as emailname, split_part(email,'@',2) as domain_name  
from employees_email

結果の表は次のようになります

出力:

PostgreSQLの列の文字列分割 - split_part() 7

まとめ :

PostgreSQLのsplit_part()関数は、区切り文字に基づいて文字列の特定の部分を抽出するための強力なツールです。これにより、文字列の目的の部分に直接アクセスできます。