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

SQL Query - Greater Than with Text Data Type

我四处搜索,找不到任何答案。

我正在查询一个将数字存储为 VARCHAR2 数据类型的数据库。
我正在尝试查找大于 1450000 (where BI_SO_NBR > '1450000') 的数字,但这并没有返回我期望的结果。

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

是否有某种方法可以将字段转换为查询中的数字或其他可行的技巧?
希望这是有意义的。

我是 SQL 的新手。

提前致谢。

你可以尝试这样使用:

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中有any值无法转换为数字,这会导致错误
2. 查询不会使用 bi_so_nbr 上的索引,如果有的话。您可以通过创建基于函数的索引来解决此问题,但将 varchar2 转换为数字将是更好的解决方案。

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

where length(BI_SO_NBR) > length('1450000') or
      (length(BI_SO_NBR) = length('1450000') and
       BI_SO_NBR > '1450000'
      )