公司的一个区号的表
正常数字只有3位、4位,但列长度却又8、9、10的我已经
替换空格
trim(area)
replace(area,' ','')
回车换行
replace(area,chr(10),'')
replace(area,char(13),'')
全角转半角
To_single_byte(area)还是发现长度有超出的
大家列举下还有哪些看不见的字符串、要如何替换以上问题有没一步到位的解决方法?

解决方案 »

  1.   

    你的该字段数据类型是不是定义成char了?
      

  2.   

    是varchar2
    如果是char,就不会有不同的长度了
    现在是length后,从3到10都有
      

  3.   

    你可以使用如下SQL语句来确认一下还有什么不可见字符:
    select dump(area) from 区号表 where length(area)>4;
      

  4.   

    dump可以查不可见字符
    有没一步到位的替换,将长度超出的都转为符合的呢
      

  5.   

    如果区号为数字,且数据库版本为10g以上
    使用正则表达式
    SELECT regexp_replace(area, '[^[:digit:]]', '') FROM 区号表 where length(area)>4;
    如果要修改,
    update 区号表 set area=regexp_replace(area, '[^[:digit:]]', '')  where length(area)>4;
      

  6.   

    谢谢了,用regexp_replace(to_single_byte(area), '[^[:digit:]]', '')把全角的同时换了
    明天到公司实验下,看成不成
    先结贴