今回は、REGEXP_LIKE関数の使い方について説明します!※この記事を読むことで、特定のカラムに「半角」「全角」「数値」が含まれているか確かめ、対象のデータを取得することができるようになります
データ準備
REGEXP_LIKE関数を試すために、テーブルを作成しデータを追加します。
-- サンプルテーブルの作成
CREATE TABLE sample_table (
id NUMBER PRIMARY KEY,
checkcolumn VARCHAR2(100)
);
-- データ追加
INSERT
ALL INTO sample_table
VALUES
(1, 'abc123')
INTO
sample_table
VALUES
(2, 'ABC123')
INTO
sample_table
VALUES
(3, '漢字')
INTO
sample_table
VALUES
(4, 'abcABC')
INTO
sample_table
VALUES
(5, '123456')
INTO
sample_table
VALUES
(6, 'abc')
INTO
sample_table
VALUES
(7, '')
SELECT
*
FROM
DUAL;
ID | CHECKCOLUMN |
---|---|
1 | abc123 |
2 | ABC123 |
3 | 漢字 |
4 | abcABC |
5 | 123456 |
6 | abc |
7 | – |
サンプルテーブルには、半角だけのレコード、全角だけのレコード、数値だけのレコード、半角全角の組み合わせたレコードがあります。では、REGEXP_LIKE関数を使ってそれぞれの値を取得してみましょう!
REGEXP_LIKE関数の使い方
半角(^[\x20-\x7E]+$)
REGEXP_LIKE関数で半角が含まれているか確認する場合には、下記のように記述します。
WHERE REGEXP_LIKE(カラム名 , '^[\x20-\x7E]+$')
SELECT
*
FROM
sample_table
WHERE
REGEXP_LIKE(checkcolumn, '^[\x20-\x7E]+$')
ID | CHECKCOLUMN |
---|---|
5 | 123456 |
あれ、取得できてないレコードがある…
SELECT
*
FROM
sample_table
WHERE
-- ASCII 範囲内の文字を含むレコードを取得
REGEXP_LIKE(checkcolumn, '[:ascii:]')
ID | CHECKCOLUMN |
---|---|
1 | abc123 |
4 | abcABC |
6 | abc |
これで半角が含まれるレコードが正しく取得できました!
全角(^[^\x00-\x7F]+$)
REGEXP_LIKE関数で全角が含まれているか確認する場合には、下記のように記述します。
WHERE REGEXP_LIKE(カラム名 , '^[^\x00-\x7F]+$')
SELECT
*
FROM
sample_table
WHERE
REGEXP_LIKE(checkcolumn, '^[^\x00-\x7F]+$')
ID | CHECKCOLUMN |
---|---|
2 | ABC123 |
3 | 漢字 |
4 | abcABC |
6 | abc |
あれ、半角が含まれている…
SELECT
*
FROM
sample_table
WHERE
-- ASCII範囲以外の文字が含まれるレコードを取得
REGEXP_LIKE(checkcolumn, '[^ -~]')
ID | CHECKCOLUMN |
---|---|
2 | ABC123 |
3 | 漢字 |
4 | abcABC |
これで全角が含まれるレコードが正しく取得できました!
数値(\d)
REGEXP_LIKE関数で数値が含まれているか確認する場合には、下記のように記述します。
WHERE REGEXP_LIKE(カラム名 , '\d')
SELECT
*
FROM
sample_table
WHERE
REGEXP_LIKE(checkcolumn, '\d')
ID | CHECKCOLUMN |
---|---|
1 | abc123 |
2 | ABC123 |
5 | 123456 |
数値が含まれているレコードはしっかり取得できてる!
まとめ
REGEXP_LIKE関数を使ってみましたが、どうやら少し癖があるようです。正規表現の書き方に注意しながら使ってみてください!
コメント