对表中的一列,如果字段值含有点号(除第1个字符外,即第1个字符可以为点号),则将点号改为横线("-"),如何做呢?谢谢。

解决方案 »

  1.   

    select replace('12121212.555.555.555.6666','.','-') from dual;
      

  2.   

    select replace(substr(',12,,,,34',2),',','-') from dual;
    看看行不行
      

  3.   

      select substr('1221.22.33.22', 0, instr('1221.22.33.22', '.', 1, 1)) ||
             replace(substr('1221.22.33.22',
                            instr('1221.22.33.22', '.', 1, 1) + 1,
                            instr('1221.22.33.22', '.', -1, 1)),
                     '.',
                     '-')
        from dual
    --输出1221.22-33-22
      

  4.   

    第1个字符外
    这个第一个字符有歧义,导致了2楼和3楼的理解不同。2楼理解成从该列的第二个位置开始替换,3楼的理解是从第二个 . 开始替换3楼的substr里的第三个参数可以去掉不写大致就是substr 和replace结合使用
    10g以上的可以用regexp_replace
      

  5.   

    select substr('.123.123.123',1,1)||replace (substr('.123.123.123',2),'.','-') from dual;--把对应的列换掉.123.123.123,表名换掉dual试试。
    上面的结果:.123-123-123
      

  6.   

    假设你的字段长度有 20 
    WITH tmp AS (SELECT '.1232.32.3' AS num FROM dual)
    SELECT substr(num,1,1)||replace(substr(num,2,20),'.','-') FROM tmp;
      

  7.   

    select TRANSLATE('12121212.555.555.555.6666','.','-') from dual;
      

  8.   

    UPDATE table_test
    SET col_name = substr(col_name, 1, 1) ||
                   REPLACE(substr(col_name, 2), ',', '-'));
    这里假设表明是:table_test
    列名是:col_name
    楼主视具体情况而定!
      

  9.   

    谢谢楼上的各位。huangyunzeng2008的正是我想用的,但是我运行了他的代码,列中的数据没有被改变,为什么?顺便说一下,REPLACE的最后一个“)”是多余的