首页 > 解决方案 > 将 varchar2 列转换为数字数据类型时出现无效标识符错误

问题描述

我有一个带有 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)

标签: oracletypestype-conversionleft-joinoracle-sqldeveloper

解决方案


什么版本的甲骨文?

在 12.2 及更高版本中,您可以default null on conversion errorto_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

推荐阅读