如何从选择查询中删除非数字

本文关键字:删除 数字 查询 选择 | 更新日期: 2023-09-27 18:04:30

我从数据库中选择了某些值,但不幸的是,它最终出现了错误"Invalid number",所以我怀疑列中有一些非数字。有趣的是,它在oracle sql developer中工作,但是当涉及到c#代码时,它正在抛出"Invalid number",所以奇怪,这是我的查询

select height+weight as total from tbl_human

于是改成了下面的查询,但是都变成0了,怎么改呢

select  REGEXP_REPLACE('height+weight','[^0-9]+','0') as total from tbl_human

编辑

身高、体重分别为varchars

如何从选择查询中删除非数字

好的,所以您希望捕获任何一列(高度或重量)中的值,这些值不是格式化为字符串的数字。你想把它们化成0。在添加它们之前,您必须分别对每个值执行此操作(否则,在您到达regexp_replace之前,添加将失败)。

有一种方法。它假设任何不是数字的东西都应该转换为0,即使例如在weight列中您有'75.5kg'的值—因为这不是数字,它将被转换为0。

而不是显示完整的解决方案,我只是显示需要应用于weight之前,被添加到height类似的东西。

with
     inputs ( weight ) as (
       select '87.5'    from dual union all
       select '87.5 kg' from dual union all
       select '68'      from dual union all
       select 'abcd'    from dual
     )
select weight,
       case when regexp_like(weight, '^'d+('.'d*)?$') then to_number(weight) 
            else 0 end as adj_weight
from inputs;
WEIGHT  ADJ_WEIGHT
------- ----------
87.5          87.5
87.5 kg          0
68              68
abcd             0

对不起,我没有足够的声誉来评论。我有一些问题:

  • heightweight列是什么数据类型?
  • 你希望从select语句中得到什么?请举个例子。

关于REGEXP_REPLACE('height+weight','[^0-9]+','0') .

你在这里做的只是用'0'替换字符串'height+weight',因为'height+weight'匹配正则表达式'[^0-9]+'。你应该使用:

REGEXP_REPLACE(height + weight,'[^0-9]+','0')

编辑:

我认为这应该可以工作:

select  (CAST(height AS decimal)+ CAST(weight AS decimal)) as total from tbl_human;