我正在寻找一种简化Oracle 10g中以下查询的方法,最好不要求助于PL / SQL结构:
SELECT * FROM my_table
WHERE instr(my_col, '<')
+ instr(my_col, '>')
+ instr(my_col, ':')
+ instr(my_col, '"')
+ instr(my_col, '/')
+ instr(my_col, '\')
+ instr(my_col, '|')
+ instr(my_col, '?')
+ instr(my_col, '*')
+ instr(my_col, CHR(0))
+ instr(my_col, CHR(1))
+ instr(my_col, CHR(2))
-- ...
+ instr(my_col, CHR(31)) > 0
查询正在查找Windows paths中非法的字符。值得庆幸的是,我后来将已知的合法字符附加到my_col
,因此我不必处理其他更复杂的非法名称案例。可以假设my_col
不为空。
该查询适用于我的目的,但我对我所做的复制粘贴编程不满意。
答案 0 :(得分:2)
使用正则表达式:
where regexp_like(my_col, '[<>:"''/\\|?*\x00\x01\x02]')
或者,您可能希望列出 有效的字符。像这样:
where regexp_like(my_col, '[^a-zA-Z0-9_]')