【问题标题】:Getting invalid identifier error while converting varchar2 column to number datatyope将 varchar2 列转换为数字数据类型时出现无效标识符错误
【发布时间】:2021-07-22 10:11:27
【问题描述】:

我有一个带有 varchar2 列的表(该列包含多个值,如空格、数字和字母数字)。和带有数字列的 B 表。 我需要使用上面的列将 A 表与 B 表连接起来。 我在连接条件下使用了 TO_NUMBER(A.Column),它抛出错误无效标识符“A.Column”。我尝试了各种方法,但仍然遇到同样的错误。

例子:

在选择中: 正则表达式喜欢 (A.column,'[0-9]') 然后 to_number(trim(A.column)) else null end as A

在加入条件下: 左连接 B ON B.column=to_number(A.column)

【问题讨论】:

    标签: oracle types type-conversion left-join oracle-sqldeveloper


    【解决方案1】:

    什么版本的 Oracle?

    在 12.2 及更高版本中,您可以将 default null on conversion error 添加到您的 to_number 调用中

              a
    left join b 
           on b.column = to_number( a.column default null on conversion error )
    

    在早期版本中,您需要加入 case 语句或用户定义的函数调用。类似的东西

    create or replace function safe_to_number( p_str in varchar2 )
      return number
    is
      l_num number;
    begin
      begin
        l_num := to_number( p_str );
      exception
        when others then
          l_num := null;
      end;
    
      return l_num;
    end;
    
              a
    left join b 
           on b.column = safe_to_number( a.column )
    

    假设您的 case 语句有效(这意味着您的所有数字都是没有千位分隔符的整数)

              a
    left join b 
           on b.column = Case when regexp_like (A.column,'[0-9]') 
                              then to_number(trim(A.column)) 
                              else null 
                          end
    

    【讨论】:

    • 感谢您的快速回复!它现在工作
    猜你喜欢
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2021-03-13
    • 2020-11-22
    • 1970-01-01
    • 2013-07-14
    相关资源
    最近更新 更多