【问题标题】:Oracle SQL : Retrieve values in BETWEEN clause for Numbers that are listed as VARCHAR type in table definitionOracle SQL:检索表定义中列为 VARCHAR 类型的数字的 BETWEEN 子句中的值
【发布时间】:2020-11-19 20:16:21
【问题描述】:

我有一个客户表,其中以下客户编号在表定义中列为 varchar 类型。虽然这些客户编号都是数字,但被列为 varchar 类型,那么在这种情况下,您将如何使用 between 子句?

Customer     Customer_number
----------------------------
A            100
B            101
C            102
D            103
E            104
F            105
G            106
H            107

运行时出现意外输出

选择 *

来自客户

100 到 105 之间的 CUSTOMER_NUMBER 位置

【问题讨论】:

  • 你有什么Oracle版本? 12.2 有一些方便的功能。

标签: sql oracle


【解决方案1】:

你会使用:

WHERE CUSTOMER_NUMBER BETWEEN '100' AND '105'

请注意,比较将作为字符串进行,因此'1000' 将匹配。

如果你想比较为一个数字,你可以转换:

WHERE TO_NUMBER(CUSTOMER_NUMBER) BETWEEN 100 AND 105

编辑:

在 Oracle 12C 中,您可以为转换错误添加默认值:

WHERE TO_NUMBER(CUSTOMER_NUMBER DEFAULT NULL ON CONVERSION ERROR) BETWEEN 100 AND 105

或者CASE 表达式也可以工作:

WHERE TO_NUMBER(CASE WHEN REGEXP_LIKE(CUSTOMER_NUMBER, '^[0-9]+$') THEN CUSTOMER_NUMBER END ) BETWEEN 100 AND 105

【讨论】:

  • 当使用 to_number() 作为数字比较时,我得到错误 ORA-01722: invalid number。
  • 这意味着您的 CUSTOMER_NUMBER 列中的值不是数字,因此无法使用 TO_NUMBER() 函数将该值转换为数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2014-02-23
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多