2013-04-17 64 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

相關問題