首页 > 解决方案 > 转换(铸造)列以在 Oracle 中进行操作

问题描述

这就是我遇到的麻烦。我有一个表,其中有列重量,该列中的数据是 varchar2,例如:60 公斤。

当我尝试创建一个 WHERE 条件要求检索 60 公斤以下的所有东西时,它并没有给我想要的结果。

我尝试使用 to_number 进行转换,但它不起作用并给我错误“无效号码”。我还尝试使用 SUBSTR 减重并转换,但效果不佳。

有什么建议么?

在此处输入图像描述

提前致谢。

标签: sqloracle

解决方案


您可以提取前导数字并将其转换为数字:

select to_number(regexp_substr(weight, '^[0-9]*'))
from t;

正则表达式从字符串 (the ^) 的开头开始并提取数字。是*任意位数。默认情况下,正则表达式匹配是“贪婪的”,这意味着它将保持匹配一行中尽可能多的数字。

如果您有小数位或负值,这可能会有点复杂。


推荐阅读