这真的开始受伤了!
我正在尝试使用正则表达式条件在Oracle开发人员中编写查询
我的目标是查找包含名称中通常不包含的字符串的所有姓氏(非字母,空格,连字符和单引号)
即。 我需要找到
J00ls
McDonald "Macca"
Smithy (Smith)
并且找不到
Smith
Mckenzie-Smith
El Hassan
O'Dowd
我目前的疑问是
select * from dm_name
WHERE regexp_like(last_name, '([^A-Za-z -])')
and batch_id = 'ATEST';
除了单引号外,不包括任何预期的内容。在使用单引号字符时,Oracvel SQL Develoepr解析器将其作为文字。
我试过了:
\' -- but got a "missing right parenthesis" error
||chr(39)|| -- but the search returned nothing
'' -- negated the previous character in the matching group e.g. '([^A-Za-z -''])' made names with '-' return.
我很感激你能提供的任何东西。
答案 0 :(得分:4)
以下作品:
select *
from dm_name
WHERE regexp_like(last_name, '([^A-Za-z ''-])');
SQL Developer是否喜欢它是我无法证明的,因为我没有安装该产品。
分享并享受。
答案 1 :(得分:4)
只需加倍单引号即可逃避报价。
所以
select *
from dm_name
where regexp_like(last_name, '[^A-Za-z ''-]')
and batch_id = 'ATEST'
另见sqlfiddle。注意,我在SQL开发人员中尝试过类似的查询,并且效果不错。
另请注意,为此,-
字符必须是组中的最后一个字符,否则它会尝试查找组SPACE
到'
而不是字符{ {1}}。