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