2013-04-17 53 views
0

我想这正则表达式转换:转换正则表达式来Oracle数据库的正则表达式

^.*[^a-z1-9\-].*$ 

的正则表达式在Oracle数据库中查询使用。我想要做的是找到包含至少一个字符的列name不同于a-z,0-9-的所有行。

查询

select * from device where regexp_like(ctnmname, '^.*[^a-z1-9\\-].*$') 

收益表中的所有行。

编辑

的问题是与0和逃脱-正则表达式。它的工作原理与正则表达式^.*[^a-z0-9-].*$

回答

2

正则表达式我自己看起来不错。你可能希望把它区分大小写,并且包括0

SELECT * FROM device WHERE REGEXP_LIKE(mycolumn, '^.*[^a-z0-9-].*$', 'c'); 
+0

真的,我忘了'0'大声笑。谢谢。 – elias

1

由于破折号是最后的字符类,你不需要逃避它:

where regexp_like(ctnmname, '^.*[^a-z1-9-].*$') 

然而

where regexp_instr(ctnmname, '[^a-z1-9-]') > 0 

可能会更容易阅读...

参见SQL fiddle

+0

感谢您的回答beny23,但仍然没有工作。给出相同的结果。 – elias

+0

你可以编辑你的问题,并添加一些你的'ctnmname'列中的值? – beny23

+0

现在有效。问题是正则表达式中的'0'。谢谢。 – elias

0
where not regexp_like(ctnmname, '^(\w|-)*$') 

fiddle

相关问题