数字のみのレコードを抽出するSQL(REGEXP_LIKE条件)
※追記:パート2(http://d.hatena.ne.jp/gonsuke777/20140909/1410228639)も見てね。
Oracle の REGEXP_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>
成功。(`・ω・)Ъ