如何仅在oracle sql中显示所有数字?

如何仅在oracle sql中显示所有数字?,sql,oracle,Sql,Oracle,如何在oracle sql中仅显示所有数字 例如: 12345 abcdef 6789 123abc abc1234 987 结果: 12345 6789 987 尝试了此语法,但无效: WHERE ID_No like '%[0-9]%' 使用REGEXP_LIKE()函数: select * from tablename where REGEXP_LIKE(ID_No, '^[0-9]+$') 一种选择是通过REGEXP_LIKE()函数使用反向逻辑,并使用'[^0-9]模式 SEL

如何在oracle sql中仅显示所有数字

例如:

12345
abcdef
6789
123abc
abc1234
987
结果:

12345
6789
987
尝试了此语法,但无效:

WHERE ID_No like '%[0-9]%'
使用REGEXP_LIKE()函数:

select * from tablename
where REGEXP_LIKE(ID_No, '^[0-9]+$')

一种选择是通过
REGEXP_LIKE()
函数使用反向逻辑,并使用
'[^0-9]
模式

SELECT *
  FROM t
 WHERE NOT REGEXP_LIKE(ID_No, '[^0-9]') 

使用
[:digit:][/code>posix作为
[^[:digit:][code>模式

SELECT *
  FROM t
 WHERE NOT REGEXP_LIKE(ID_No, '[^[:digit:]]')  

最快的解决方案使用标准(非正则表达式)函数

select *
from   t
where  translate(id_no, '~0123456789', '~') is null
;
请注意使用了一个附加字符(我使用了
~
,但您可以使用任何其他非数字字符)-这是必要的,因为Oracle在第三个参数为
null
时对
TRANSLATE
进行了奇怪的规范

translate
将用“nothing”替换每个数字(意思是,它将删除所有数字),同时用自身替换平铺,并保留所有其他字符不变。因此,仅当所有字符都是数字时,返回值才为
null

等效解决方案:

...
where ltrim(id_no, '0123456789') is null

如果您使用的是oracle 12.2或更高版本,另一种选择是使用
to_NUMBER
转换错误
子句,如下所示:

SELECT *
  FROM YOUR_TABLE
 WHERE TO_NUMBER(ID_NO DEFAULT -1 ON CONVERSION ERROR) <> - 1
    OR ID_NO = '-1'
选择*
从你的桌子上
到何处\u编号(ID\u无默认值-转换错误时为1)-1
或ID_NO='-1'

干杯

Hi Tejash在Hue Hive中没有REGEXP_,就像只提取和替换一样…在Hue Hive中尝试了这个,它不起作用。没有类似REGEXP_的函数…很抱歉,我们正在Oracle Sql Bench中共享数据,但它有一个停机问题,有人告诉我它们具有相同的语法。sql工作台启动后,我将尝试REGEXP_,就像……谢谢。