如何对oracle sql中的数字字符串进行数学比较[重复]

Posted

技术标签:

【中文标题】如何对oracle sql中的数字字符串进行数学比较[重复]【英文标题】:How to do mathematical comparison to numeric strings in oracle sql [duplicate] 【发布时间】:2018-05-04 11:51:30 【问题描述】:

我有一列存储数字和字符串值。我想从该列中过滤这些数值。假设我需要得到小于 100 的行。

我的表

id     |    value
-------------------
1          aa
2          103
3          cc
4          90
5          88

假设上表中,'value'列类型为varchar。

我想选择值

我的结果集应该如下,

id     |    value
-------------------
4          90
5          88

这是我的想象查询,但它没有

select * from mytable where TO_NUMBER(value)<100;

我的问题比TO_NUMBER("*") 的情况要迟钝。重要的是我想做一个数学比较,我想选择&lt;100 数字。

【问题讨论】:

应该像 try parse 一样。如果该文本值是一个数字。那么它应该检查小于 100 的数字 你总是可以remove non-numeric chars,在需要的时候小心保留符号或小数点,但我想它永远不会表现得很好。 【参考方案1】:

如果值是小数,那么您可以通过以下方式过滤掉不正确的值:

 where case
        when regexp_like(value, '^\d+$') and to_number(value) < 100 then 1
        else 0
       end = 1

SQL Fiddle Demo

【讨论】:

以上是关于如何对oracle sql中的数字字符串进行数学比较[重复]的主要内容,如果未能解决你的问题,请参考以下文章

oracle在sql中判断字段值是数字还是字符串

Java 存储过程是不是比 Oracle 中的 PL/SQL 慢?

Oracle SQL常用内置系统函数总结

如何计算oracle pl/sql中数字的位数?

oracle 表中如何对按含有字母和数字的编号来进行排序

如何对oracle数据库进行监控检查