简化 SQL 中的重复函数调用
Simplifying repetitive function call in SQL
我正在寻找一种方法来简化 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
不为空。
该查询对我的目的来说效果很好,但我对我所做的复制粘贴编程不满意。
使用正则表达式:
where regexp_like(my_col, '[<>:"''/\|?*\x00\x01\x02]')
或者,您可能更愿意列出 有效的字符。像这样:
where regexp_like(my_col, '[^a-zA-Z0-9_]')
我正在寻找一种方法来简化 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
不为空。
该查询对我的目的来说效果很好,但我对我所做的复制粘贴编程不满意。
使用正则表达式:
where regexp_like(my_col, '[<>:"''/\|?*\x00\x01\x02]')
或者,您可能更愿意列出 有效的字符。像这样:
where regexp_like(my_col, '[^a-zA-Z0-9_]')