有一字符串是:4683,968
有一字段id是number型
现在要把4683,968转换成number型,来进行id in (4683,968)的判断,
但是select to_number('4683,968') from dual会报错,因为逗号为无效数字,
现在用什么方法才能转换用以比较呢?郁闷求解。

解决方案 »

  1.   

    select to_number(replace('4683,968',',','')) from dual;
      

  2.   

    ‘4683,968’是一组数字,又不是一个数字,用to_number转换肯定不行。
    如果是为了id in (4683,968)判断,好像没有必要转换的啊。你能组成一个SQL语句再执行就可以。
      

  3.   

    4683,968是2个id,参数传过来后就是varchar2的,所以要转换。hongqi162(失踪的月亮) 的方法不行,因为是2个id,不能连在一起。大家还有什么办法?多谢了!
      

  4.   

    select * from t where id in(
    select substr('4683,968',1,instr('4683,968',',',1)-1) id from dual
    union all
    select substr('4683,968',instr('4683,968',',',1)+1,length('4683,968')) id from dual)
      

  5.   

    是varchar2也没有关系啊,你甚至可以将id也变成varchar2类型,再进行两个字符串中进行匹配啊。另外一个办法是将‘4683,968’变成数字数组再进行比较。
      

  6.   

    多谢hongqi162(失踪的月亮)的关注,不一定只有2个id,有可能是多个(n个),如果是4683,968,969
    就会出现:
    4683
    968,969
    968和969中间还是有逗号的。
      

  7.   

    多谢TodayZ(天山浪子)的关注,to_char(id) in (4683,968,969)我测试了,如果是4683,968,969是有数据的,但现在是'4683,968,969'就不行了。只要能转换成'4683','968','969'就ok了。
      

  8.   

    select ''''||replace('4683,968,969',',',''',''')||'''' from dual;
      

  9.   

    V_IN_ID varchar2传过来的值为:'4683$968$969'select replace(V_IN_ID,'$',',') into list from dual;
    select ''''||replace(V_IN_ID,'$',''',''')||'''' into list from dual;
    select  replace(V_IN_ID,'$',''',''') into list from dual;三种方法都试过了,还是不行。大哥大姐帮我出出主意啊。
      

  10.   

    楼主,
    select ''''||replace('4683,968,969',',',''',''')||'''' from dual;
    这个我都试过了,怎么不行呢?
      

  11.   

    你要是在存储过程里就更应该没问题了啊:
    declare   i integer;
      temp1 varchar2(20);
      v1 varchar2(20);
      v2 varchar2(20);
      v_sql varchar2(20);
    begin 
      v1:='4683$968$969';
      
      select  ''''||replace(v1,'$',''',''')||'''' into temp1 from dual;
      
      dbms_output.put_line(temp1);
    end;输出:'4683','968','969'
      

  12.   

    难道varchar2自动带单引号的?!
    经过转换是不是最后变成了id in (''4683','968','969'')?
      

  13.   

    你的sql有问题,把'''||||'''替换成'||||'
      

  14.   

    实在不行,换另一种方法。现在传过来的值是:4683$968$969,能不能循环找出4683,968,969然后拼成:
    select 4683 id from dual
    union
    select 968 id from dual
    union
    select 969 id from dual
    ..........
    这个循环拼接的sql怎么写啊?
      

  15.   

    实在不行,换另一种方法。现在传过来的值是:4683$968$969,能不能循环找出4683,968,969然后拼成:
    select 4683 id from dual
    union
    select 968 id from dual
    union
    select 969 id from dual
    ..........
    这个循环拼接的sql怎么写啊?
    SELECT (select 4683 id from dual)||(select 968 id from dual)||(select 969 id from dual) ID  FROM DUAL;
      

  16.   

    SELECT replace('4683,968,969',',','' ) FROM DUAL;
      

  17.   

    hongqi162(失踪的月亮) ( ) 信誉:100  2007-9-10 17:24:21  得分: 0  
        
    select to_number(replace('4683,968',',','')) from dual;
    hongqi162(失踪的月亮) 说的非常对~~~~~