我对 Oracle 还很陌生。
我在 Oracle 中有一个名为 Salary
的列,其值类似于 '19000.00'
、NULL
、N/A
,不想说,'17500'
。
如何编写返回数值 = 无字母或 null 的 SQL 查询?
在上面的示例中,将是 '19000.00'
、'17500.00'
。否则,对于所有非数字值(包括 NULL
和字母),返回 NULL
。例如对于NULL
、N/A
,宁愿不说。
select salary from myTable where ...?
最佳答案
您可以简单地使用正则表达式来过滤表格,例如:REGEXP_LIKE(salary, '\d+(\.\d+)?')
此表达式允许数字序列,可以选择后跟一个点和更多数字。
<强> Demo on 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
关于sql - 仅选择数值,否则返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57755354/