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'
)
我四处搜索,找不到任何答案。
我正在查询一个将数字存储为 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'
)