将varchar2列转换为数字datatyope时出现无效标识符错误



我有一个带有varchar2列的表(该列包含多个值,如空格、数字和字母数字(。和带数字列的B表。我需要使用上面的列连接A表和B表。我在联接条件中使用了TO_NUMBER(A.Column(,它引发错误,标识符"A"无效。列"。我试过各种方法,但还是犯了同样的错误。

示例:

在选择中:类似(A.column,'[0-9]'(的regexp然后to_number(trim(A.columns((else null以结尾时的情况

在联接条件下:左接合B ONB.列=到编号(A.列(

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

最新更新