首页 > 解决方案 > 仅选择数值,否则返回 NULL

问题描述

我对甲骨文很陌生。

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

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

从上面的例子来看,'19000.00', '17500.00'。否则,对于所有非数字值,包括NULL和 字母,返回NULL。例如对于NULL, N/A, 不想说。

select salary from myTable where ...?

标签: sqlstringoraclewhere-clause

解决方案


您可以简单地使用正则表达式来过滤表,例如:REGEXP_LIKE(salary, '\d+(\.\d+)?')

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

DB Fiddle 上的演示

with x as (
    SELECT 'N/A' salary FROM DUAL
    UNION ALL SELECT NULL FROM DUAL
    UNION ALL SELECT '19000.00' FROM DUAL
    UNION ALL SELECT '17500' FROM DUAL
)
SELECT * FROM x WHERE REGEXP_LIKE(salary, '\d+(\.\d+)?')

产量:

| SALARY   |
| :------- |
| 19000.00 |
| 17500    |

PS:如果不想过滤掉非数字值而是将其替换为NULL,则:

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

推荐阅读