0

我四处寻找,在任何地方都找不到答案。

我正在查询一个将数字存储为VARCHAR2数据类型的数据库。
我试图找到大于1450000( where BI_SO_NBR > '1450000') 的数字,但这并不能恢复我期望的结果。

我假设这是因为该值存储为文本,我不知道有什么方法可以绕过它。

有没有办法将字段转换为我的查询中的数字或其他一些可行的技巧?
希望这是有道理的。

我对 SQL 很陌生。

提前致谢。

4

3 回答 3

2

如果数字太长而无法正确转换为数字,并且它始终是一个没有左填充零的整数,那么您也可以这样做:

where length(BI_SO_NBR) > length('1450000') or
      (length(BI_SO_NBR) = length('1450000') and
       BI_SO_NBR > '1450000'
      )
于 2015-04-17T12:41:17.260 回答
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
于 2015-04-17T12:35:49.667 回答
1

如果您在谈论 Oracle,那么:

where to_number(bi_so_nbr) > 1450000

但是,这有两个问题:
1. 如果其中有任何bi_so_nbr不能转换为数字,这可能会导致错误
2. 查询不会使用 上的索引bi_so_nbr,如果有的话。您可以通过创建基于函数的索引来解决此问题,但将其转换varchar2为数字将是更好的解决方案。

于 2015-04-17T12:36:39.667 回答