SPLIT_PART 関数
指定された区切り記号で文字列を分割し、指定された位置にあるパートを返します。
構文
SPLIT_PART(string, delimiter, position)
引数
- string
-
分割する文字列の列、式、または文字列リテラル。文字列には CHAR 型または VARCHAR 型を指定できます。
- delimiter
-
入力文字列のセクションを示す区切り文字列。
delimiter がリテラルである場合は、それを一重引用符で囲みます。
- position
-
返す文字列の部分の位置 (1 からカウント)。1 以上の整数である必要があります。位置が文字列の部分の数より大きい場合、SPLIT_PART は空の文字列を返します。文字列で区切り文字が見つからない場合、戻り値には指定された部分の内容が含まれます。これは、文字列全体または空の値である可能性があります。
戻り型
CHAR 文字列または VARCHAR 文字列 (文字列パラメータと同じ型)。
例
次の例では、$
区切り文字を使用して文字列リテラルを複数の部分に分割し、2 番目の部分を返します。
select split_part('abc$def$ghi','$',2)
split_part ---------- def
次の例では、$
区切り文字を使用して文字列リテラルを複数の部分に分割します。4
の部分が見つからないため、空の文字列が返されます。
select split_part('abc$def$ghi','$',4)
split_part ----------
次の例では、#
区切り文字を使用して文字列リテラルを複数の部分に分割します。区切り文字が見つからないため、最初の部分である文字列全体が返されます。
select split_part('abc$def$ghi','#',1)
split_part ------------ abc$def$ghi
次の例は、タイムスタンプフィールド LISTTIME を年コンポーネント、月コンポーネント、および日コンポーネントに分割します。
select listtime, split_part(listtime,'-',1) as year, split_part(listtime,'-',2) as month, split_part(split_part(listtime,'-',3),' ',1) as day from listing limit 5;
listtime | year | month | day ---------------------+------+-------+------ 2008-03-05 12:25:29 | 2008 | 03 | 05 2008-09-09 08:03:36 | 2008 | 09 | 09 2008-09-26 05:43:12 | 2008 | 09 | 26 2008-10-04 02:00:30 | 2008 | 10 | 04 2008-01-06 08:33:11 | 2008 | 01 | 06
次の例は、LISTTIME タイムスタンプフィールドを選択し、それを '-'
文字で分割して月 (LISTTIME 文字列の 2 番目の部分) を取得してから、各月のエントリ数をカウントします。
select split_part(listtime,'-',2) as month, count(*) from listing group by split_part(listtime,'-',2) order by 1, 2;
month | count -------+------- 01 | 18543 02 | 16620 03 | 17594 04 | 16822 05 | 17618 06 | 17158 07 | 17626 08 | 17881 09 | 17378 10 | 17756 11 | 12912 12 | 4589