查询意外返回没有行
问题描述:
我想从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
我得到的结果的负载。
这些结果是否与“不等于空字符串”子句匹配?
答
''
是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
'regexp_like(cell_ph_num,'\ D')' – 2014-09-02 15:39:43