トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

7-20 末尾が数字のデータを取得

SQLパズル

テーブル
Val
--------
0001
0002
0003
0010
abcd
a001
aaaaaaa1
001
03
テスト
000a

Valの末尾4文字が数字のデータを出力する。

出力結果
Val
----
0001
0002
0003
0010


SQL

--■■■文字関数を使用■■■
select val
from (select '0001' as val from dual
union select '0002' from dual
union select '0003' from dual
union select '0010' from dual
union select 'abcd' from dual
union select 'a001' from dual
union select 'aaaaaaa1' from dual
union select '001' from dual
union select '03' from dual
union select 'テスト' from dual
union select '000a' from dual)
where Length(val) >=4
  and translate(substr(val,-4),'a012345679','a') is null;

--■■■正規表現を使用(10g以降)■■■
select val
from (select '0001' as val from dual
union select '0002' from dual
union select '0003' from dual
union select '0010' from dual
union select 'abcd' from dual
union select 'a001' from dual
union select 'aaaaaaa1' from dual
union select '001' from dual
union select '03' from dual
union select 'テスト' from dual
union select '000a' from dual)
where RegExp_Like(val,'[0-9]{4}$');


解説

Length関数で文字列が4文字以上かチェックし、
translate関数で数字を削除してnullになるかチェックしています。

正規表現を使う方法もあります。

10-120 指定文字以外の文字がないかチェック