ねら~ITエンジニア雑記

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

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

以前の記事である

 数字のみのレコードを抽出するSQL(REGEXP_LIKE条件)
 http://d.hatena.ne.jp/gonsuke777/20120215/1329301835

の改良バージョン。まぁ改良と言っても結果は変わらないんですがね。。。
やっぱり 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 REGEXP_LIKE(COL1, '^[0-9]+$');

(1). 先頭の「^」は行頭を意味する。
(2). [0-9]は数字の正規表現
(3). 「+」は直前の文字が1文字以上マッチングすることを意味する。
(4). 最後の「$」は行末を意味する。
(5). ↑の(1)〜(4)の合わせ技で、数値のみのレコードが出力される。

結果は↓

SQL> 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 REGEXP_LIKE(COL1, '^[0-9]+$');

COL1
-----
0123
1
2

SQL>

成功。(`・ω・)Ъ