sql - 仅选择数值,否则返回 NULL

标签 sql string oracle where-clause

我对 Oracle 还很陌生。

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

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

在上面的示例中,将是 '19000.00''17500.00'。否则,对于所有非数字值(包括 NULL 和字母),返回 NULL。例如对于NULLN/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/

相关文章:

arrays - D编程语言中的空字符串

oracle - 级联 LOVS - 默认值

sql - 检查重复记录 VS try/catch 唯一键约束

sql - 选择未分配的硬件

sql - 修改表的架构以使其继承另一个表的架构,而无需重新创建表或重新插入数据

oracle - 在 Oracle 中编译用户定义函数时出现错误 PLS-00103

sql - 如何一次删除多个约束(Oracle、SQL)

mysql - 选择至少包含一列可能值的 n 行

java - Java 中 "abc"+ "de"和 "abc"+ de (de = "de") 之间的区别?

python - Telnetlib、字节串和 "invalid escape sequence"