Sql 仅选择数值,否则返回NULL

Sql 仅选择数值,否则返回NULL,sql,string,oracle,where-clause,Sql,String,Oracle,Where Clause,我对甲骨文很陌生 我在Oracle中有一个名为Salary的列,它的值类似于'19000.00',NULL,N/a,我不想说'17500' 如何编写返回数值=无字母或null的sql查询 从上面的例子可以看出是“19000.00”、“17500.00”。否则,对于所有非数值,包括NULL和字母,返回NULL。例如,对于NULL,不适用,不愿意说 select salary from myTable where ...? 您可以简单地使用正则表达式来过滤表,比如:REGEXP\u LIKEsal

我对甲骨文很陌生

我在Oracle中有一个名为Salary的列,它的值类似于'19000.00',NULL,N/a,我不想说'17500'

如何编写返回数值=无字母或null的sql查询

从上面的例子可以看出是“19000.00”、“17500.00”。否则,对于所有非数值,包括NULL和字母,返回NULL。例如,对于NULL,不适用,不愿意说

select salary from myTable where ...?

您可以简单地使用正则表达式来过滤表,比如:REGEXP\u LIKEsalary,“\d+\。\d+?”

此表达式允许数字序列,可选后跟一个点和更多数字

:

收益率:

| SALARY   |
| :------- |
| 19000.00 |
| 17500    |
PS:如果不想过滤掉非数值,而是将其替换为NULL,那么:

SELECT CASE WHEN REGEXP_LIKE(salary, '\d+(\.\d+)?') THEN salary END FROM x 

在Oracle 12.2中,您可以使用VALIDATE_转换:

或显示非数字的空值:

select case when VALIDATE_CONVERSION(salary AS NUMBER) = 1 then salary end 
from my_table;

不要在varchar列中存储数字您使用的Oracle版本是什么?
select salary
from my_table
where VALIDATE_CONVERSION(salary AS NUMBER) = 1;
select case when VALIDATE_CONVERSION(salary AS NUMBER) = 1 then salary end 
from my_table;