如何从选择查询中删除非数字
本文关键字:删除 数字 查询 选择 | 更新日期: 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
对不起,我没有足够的声誉来评论。我有一些问题:
-
height
和weight
列是什么数据类型? - 你希望从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;