【Oracle】スペース・カンマ・改行で分割する方法(REGEXP_SUBSTR)

Oracle

今回は、文字列をスペース・カンマ・改行で分割する方法について説明します。この記事を読めば、任意の区切り文字から文字列を柔軟に取得することができるようになります。

やりたいこと正しい正規表現例
半角スペースで分割'[^ ]+'
全角スペースで分割'[^ ]+'
カンマで分割'[^,]+'
改行(LF/CR)で分割‘[^’ || CHR(10) || CHR(13) || ‘]+’

今回使う関数は、REGEXP_SUBSTRです。

REGEXP_SUBSTR(文字列, パターン, 開始位置, 出現順)

半角スペースで分割

SELECT
  'リンゴ バナナ オレンジ' AS 元の文字列,
  REGEXP_SUBSTR('リンゴ バナナ オレンジ', '[^ ]+', 1, 1) AS word1,
  REGEXP_SUBSTR('リンゴ バナナ オレンジ', '[^ ]+', 1, 2) AS word2,
  REGEXP_SUBSTR('リンゴ バナナ オレンジ', '[^ ]+', 1, 3) AS word3
FROM dual;

半角スペースで区切られた文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。

元の文字列WORD1WORD2WORD3
リンゴ バナナ オレンジリンゴバナナオレンジ

全角スペースで分割

SELECT
  '東京 大阪 福岡' AS 元の文字列,
  REGEXP_SUBSTR('東京 大阪 福岡', '[^ ]+', 1, 1) AS word1,
  REGEXP_SUBSTR('東京 大阪 福岡', '[^ ]+', 1, 2) AS word2,
  REGEXP_SUBSTR('東京 大阪 福岡', '[^ ]+', 1, 3) AS word3
FROM dual;

全角スペースで区切られた文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。

元の文字列WORD1WORD2WORD3
東京 大阪 福岡東京大阪福岡

カンマで分割

SELECT
  '1,2,3' AS 元の文字列,
  REGEXP_SUBSTR('1,2,3', '[^,]+', 1, 1) AS word1,
  REGEXP_SUBSTR('1,2,3', '[^,]+', 1, 2) AS word2,
  REGEXP_SUBSTR('1,2,3', '[^,]+', 1, 3) AS word3
FROM dual;

カンマで区切られた文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。

元の文字列WORD1WORD2WORD3
1,2,3

改行(LF/CR)で分割

SELECT
  '商品A' || CHR(10) || '商品B' || CHR(13) || '商品C' AS 元の文字列,
  REGEXP_SUBSTR('商品A' || CHR(10) || '商品B' || CHR(13) || '商品C', '[^' || CHR(10) || CHR(13) || ']+', 1, 1) AS line1,
  REGEXP_SUBSTR('商品A' || CHR(10) || '商品B' || CHR(13) || '商品C', '[^' || CHR(10) || CHR(13) || ']+', 1, 2) AS line2,
  REGEXP_SUBSTR('商品A' || CHR(10) || '商品B' || CHR(13) || '商品C', '[^' || CHR(10) || CHR(13) || ']+', 1, 3) AS line3
FROM dual;

改行されている文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。

元の文字列LINE1LINE2LINE3
商品A
商品B
商品C
商品A商品B商品C

特定の文字をカウントするには?

文字数を比較して特定の文字をカウントします。

LENGTH('文字列') - LENGTH(REPLACE('文字列', 'カウントしたい文字列', ''))
SELECT
  LENGTH('りんご バナナ オレンジ パイナップル メロン グレープ キウイ いちご マンゴー スイカ')
    - LENGTH(REPLACE('りんご バナナ オレンジ パイナップル メロン グレープ キウイ いちご マンゴー スイカ', ' ', '')) AS space_count
FROM dual;

半角スペースの文字数はいくつあるのか確認してみました。

SPACE_COUNT
9

まとめ

さらっと説明ましたが、サンプルコードを使って実際に動きを確認してみてください!

コメント

タイトルとURLをコピーしました