SQL查询 - 大于文本数据类型

时间:2015-04-17 12:32:11

标签: sql oracle varchar2

我四处寻找,无法在任何地方找到答案。

我正在查询将数字存储为VARCHAR2数据类型的数据库。我试图找到大于1450000where BI_SO_NBR > '1450000')的数字,但这并没有带回我期待的结果。

我假设这是因为该值存储为文本,我不知道如何绕过它。

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

我对SQL很新。

提前致谢。

3 个答案:

答案 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}}转换为数字将是更好的解决方案。