我四处寻找,在任何地方都找不到答案。
我正在查询一个将数字存储为VARCHAR2
数据类型的数据库。
我试图找到大于1450000
( where BI_SO_NBR > '1450000'
) 的数字,但这并不能恢复我期望的结果。
我假设这是因为该值存储为文本,我不知道有什么方法可以绕过它。
有没有办法将字段转换为我的查询中的数字或其他一些可行的技巧?
希望这是有道理的。
我对 SQL 很陌生。
提前致谢。
如果数字太长而无法正确转换为数字,并且它始终是一个没有左填充零的整数,那么您也可以这样做:
where length(BI_SO_NBR) > length('1450000') or
(length(BI_SO_NBR) = length('1450000') and
BI_SO_NBR > '1450000'
)
你可以尝试这样使用:
where to_number(BI_SO_NBR) > 1450000
假设您使用的是 Oracle 数据库。还要检查To_Number函数
编辑:-
你可以试试这个(在 OP 评论说它有效之后):
where COALESCE(TO_NUMBER(REGEXP_SUBSTR(BI_SO_NBR, '^\d+(\.\d+)?')), 0) > 1450000
如果您在谈论 Oracle,那么:
where to_number(bi_so_nbr) > 1450000
但是,这有两个问题:
1. 如果其中有任何值bi_so_nbr
不能转换为数字,这可能会导致错误
2. 查询不会使用 上的索引bi_so_nbr
,如果有的话。您可以通过创建基于函数的索引来解决此问题,但将其转换varchar2
为数字将是更好的解决方案。