代码之家  ›  专栏  ›  技术社区  ›  Rene

select from varchar2 column with numeric value有时会给出无效的数字错误

  •  1
  • Rene  · 技术社区  · 15 年前

    我试图理解为什么在某些系统上,当我试图从varchar2列中选择一个值时,会收到一个无效的数字错误消息,而在其他系统上,当我执行完全相同的操作时,不会收到错误消息。

    桌子是这样的:

    ID   Column_1  Column_2
     1         V     text
     2         D        1
     3         D        2
     4         D        3
    

    和一个查询:

    select ID
      from table
     where column_1='D'
       and column_2 = :some_number_value
    

    我们已修复查询:

    select ID
      from table
     where column_1='D'
       and column_2 = to_char(:some_number_value)
    

    这个原始查询在大多数系统上运行良好,但在某些系统上会出现“无效数字”错误。问题是为什么?为什么它能在大多数系统上工作而不能在某些系统上工作?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Peter Lang    15 年前

    这取决于检查条件的顺序。如果 column_1 首先计算,然后隐式转换 column_2 一个数字工程。如果 先检查,然后转换 text 到一个数字失败。

    优化器决定评估条件的顺序。如果你有索引 但不是开着 第1列 例如,可能要使用此索引,因此转换将失败。


    你所说的“某个数值”是什么意思?数值总是数字,但可以是空的?支票 column_2 = NULL 不会返回任何行, NULL 只能通过使用 IS NULL ,不是 = NULL .