2014-09-02 98 views
0

我想从S_CONTACT表中的Siebel的表中返回手机号码列表,其中值包含数字以外的任何内容。查询意外返回没有行

我使用的查询是:

select cell_ph_num 
from s_contact 
where regexp_replace(cell_ph_num, '0|1|2|3|4|5|6|7|8|9', '') <> '' 

但我没有得到任何结果。

然而,当我运行以下查询:

select regexp_replace(cell_ph_num, '0|1|2|3|4|5|6|7|8|9', '') from s_contact 

我得到的结果的负载。

这些结果是否与“不等于空字符串”子句匹配?

+1

'regexp_like(cell_ph_num,'\ D')' – 2014-09-02 15:39:43

回答

3

''是Oracle NULL ..所以它必须是IS NOT NULL

select cell_ph_num 
from s_contact 
where regexp_replace(cell_ph_num, '0|1|2|3|4|5|6|7|8|9', '') IS NOT NULL 

,或者我们可以通过POSIX

WHERE REGEXP_LIKE (cell_ph_num,'[^[:DIGIT:]]'); 

OR 的Perl风格使用REGEXP_LIKE这样POSIX相当于

WHERE REGEXP_LIKE (cell_ph_num,'\D'); 
+0

谢谢。我知道''和NULL在Oracle中是“相同的”,但为什么<>''不起作用? – Ste 2014-09-02 15:28:17

+0

NULL不能与任何关系运算符一起使用。只允许IS NULL或'IS NOT NULL'。否则你必须使用'NVL()' – 2014-09-02 15:43:34