ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

数字のみのレコードを抽出するSQL(REGEXP_LIKE条件)

追記:パート2(http://d.hatena.ne.jp/gonsuke777/20140909/1410228639)も見てね。
OracleREGEXP_LIKE条件を使用してみる。

WITH A AS (
  SELECT 'A' AS COL1 FROM DUAL
  UNION
  SELECT '1' FROM DUAL
  UNION
  SELECT '2' FROM DUAL
  UNION
  SELECT '1A' FROM DUAL
  UNION
  SELECT '0123' FROM DUAL
  UNION
  SELECT 'a0123' FROM DUAL
)
SELECT * FROM A
WHERE NOT(REGEXP_LIKE(COL1, '[^0-9]'));

(1).【[^0-9]】は 正規表現で数字の補集合(数字以外の文字)となる。
(2).【REGEXP_LIKE(COL1, '[^0-9]')】は COL1列に数字以外の文字を含むレコードの集合となる。
(3). 上記(2)を NOT条件でひっくり返して、数字のみのレコードを抽出できる。

結果は↓

SQL> l
  1  WITH A AS (
  2    SELECT 'A' AS COL1 FROM DUAL
  3    UNION
  4    SELECT '1' FROM DUAL
  5    UNION
  6    SELECT '2' FROM DUAL
  7    UNION
  8    SELECT '1A' FROM DUAL
  9    UNION
 10    SELECT '0123' FROM DUAL
 11    UNION
 12    SELECT 'a0123' FROM DUAL
 13  )
 14  SELECT * FROM A
 15* WHERE NOT(REGEXP_LIKE(COL1, '[^0-9]'))
SQL> /

COL1
---------------
0123
1
2

SQL>

成功。(`・ω・)Ъ