今回は、文字列をスペース・カンマ・改行で分割する方法について説明します。この記事を読めば、任意の区切り文字から文字列を柔軟に取得することができるようになります。
やりたいこと | 正しい正規表現例 |
---|---|
半角スペースで分割 | '[^ ]+' |
全角スペースで分割 | '[^ ]+' |
カンマで分割 | '[^,]+' |
改行(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;
半角スペースで区切られた文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。
元の文字列 | WORD1 | WORD2 | WORD3 |
---|---|---|---|
リンゴ バナナ オレンジ | リンゴ | バナナ | オレンジ |
全角スペースで分割
SELECT
'東京 大阪 福岡' AS 元の文字列,
REGEXP_SUBSTR('東京 大阪 福岡', '[^ ]+', 1, 1) AS word1,
REGEXP_SUBSTR('東京 大阪 福岡', '[^ ]+', 1, 2) AS word2,
REGEXP_SUBSTR('東京 大阪 福岡', '[^ ]+', 1, 3) AS word3
FROM dual;
全角スペースで区切られた文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。
元の文字列 | WORD1 | WORD2 | WORD3 |
---|---|---|---|
東京 大阪 福岡 | 東京 | 大阪 | 福岡 |
カンマで分割
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;
カンマで区切られた文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。
元の文字列 | WORD1 | WORD2 | WORD3 |
---|---|---|---|
1,2,3 | 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;
改行されている文字列を、正規表現を使って分割し、それぞれの文字を取得してみました。
元の文字列 | LINE1 | LINE2 | LINE3 |
---|---|---|---|
商品A 商品B 商品C | 商品A | 商品B | 商品C |
特定の文字をカウントするには?
文字数を比較して特定の文字をカウントします。
LENGTH('文字列') - LENGTH(REPLACE('文字列', 'カウントしたい文字列', ''))
SELECT
LENGTH('りんご バナナ オレンジ パイナップル メロン グレープ キウイ いちご マンゴー スイカ')
- LENGTH(REPLACE('りんご バナナ オレンジ パイナップル メロン グレープ キウイ いちご マンゴー スイカ', ' ', '')) AS space_count
FROM dual;
半角スペースの文字数はいくつあるのか確認してみました。
SPACE_COUNT |
---|
9 |
まとめ
さらっと説明ましたが、サンプルコードを使って実際に動きを確認してみてください!
コメント