Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle SQL中选择仅包含数字字符的行_Sql_Oracle - Fatal编程技术网

如何在Oracle SQL中选择仅包含数字字符的行

如何在Oracle SQL中选择仅包含数字字符的行,sql,oracle,Sql,Oracle,我只想保留带有数字字符的行,即0-9。我的源数据可以有任何类型的字符,例如2、%、( 我尝试过使用WHERE REGEXP_LIKE(邮政编码“^[:digit:][]+$”; 然而,在我的Oracle版本中,我得到一个错误,即 函数regexp_like(字符变化,“未知”)不存在 对于Oracle 10或更高版本,您可以使用regexp函数。在早期版本中,translate函数将帮助您: SELECT postcode FROM table_name WHERE length(t

我只想保留带有数字字符的行,即0-9。我的源数据可以有任何类型的字符,例如2、%、(

我尝试过使用
WHERE REGEXP_LIKE(邮政编码“^[:digit:][]+$”;
然而,在我的Oracle版本中,我得到一个错误,即

函数regexp_like(字符变化,“未知”)不存在


对于
Oracle 10
或更高版本,您可以使用
regexp
函数。在早期版本中,translate函数将帮助您:

SELECT  postcode
FROM    table_name
WHERE   length(translate(postcode,'0123456789','1')) is null
AND     postcode IS NOT NULL;

上述答案对我也适用

SELECT translate('1234bsdfs3@23##PU', '0123456789' || translate('1234bsdfs3@23##PU','x123456789','x'),'0123456789') nums
   FROM dual  ;

Nums:
1234323
您需要
regexp\u like()
,并且您的版本应该可以工作:

select t.*
from t
where regexp_like(t.postcode, '^[0-9]+$');
但是,您的错误看起来更像是Postgres错误,因此这可能会起作用:

t.postcode ~ '^[0-9]+$'

对于Gordon Linoff答案的替代方法,我们可以尝试使用
REGEXP\u REPLACE

SELECT *
FROM yourTable
WHERE REGEXP_REPLACE(postcode, '[0-9]+', '') IS NULL;

这里的想法是去掉所有数字字符,然后声明没有留下任何字符。对于混合数字字母值,正则表达式替换将导致非空字符串。

谢谢,我尝试了这一点,并在我的邮政编码列中为每一行获取空值,因此它无法正常工作。我希望保留仅包含nume的行ric编号0-9我尝试过这个,但仍然可以看到带有字母GB2的邮政编码2G6@Andrew这不应该是另一种方式吗,即与
is null
进行比较以获得要保留的行,与
is not null
进行比较以获得要删除的行?@bp123现在查看我的最后两个更新答案,并让我知道是哪一个works@Adder是的,我已经做了但是bp123说它对他不起作用,这很奇怪,错误消息听起来不像Oracle,听起来更像Postgres。为什么不在数据加载到系统之前清理数据(或者更好,添加输入保护,这样用户就不会输入错误的数据)?祝你好运。嗨,我试过了,得到了和regexp_一样的错误函数(字符变化,“未知”)不存在
=”
在Oracle中永远不会为真,因为没有单独的“空字符串”。@比尔:是的,你说得对,我应该进行空检查。
t.postcode ~ '^[0-9]+$'
SELECT *
FROM yourTable
WHERE REGEXP_REPLACE(postcode, '[0-9]+', '') IS NULL;