现在oracle中有char(70)类型的数据,不够70个字符给自动加空格了,想把空格去掉,用了一些方法都没成功,哪位高手写过这样的代码,帮帮忙吧!感谢大家,鞠躬!

解决方案 »

  1.   

    把char类型修改为varchar不就可以 了吗?
      

  2.   

    char在数据库中存储总是将不足定义长度以空格填补,
    取出数据后可以使用trim函数来截取空格。使用varchar2就行了,使用char得不到任何明显的好处!
    反而自寻烦恼!!
      

  3.   

    一般的系统中除非只有固定长度的字段采用char,其他都用varchar2的
      

  4.   

    不是我不想弄成varchar2,数据是从别的数据库下载下来的,下载到ORACLE数据库上后就是char类型的!
      

  5.   

    用过trim方法,不能够截取空格!
      

  6.   


    --trim() 这个函数只是在显示的时候将末尾空格去掉。
    --由于你数据库字段类型是 char类型,所以只要你的数据位数不足70位,数据库就会默认后补空格,这就叫规矩。
    --如果你想改变这个规矩,请联系甲骨文公司,在12g版本上修改。
      

  7.   

    可以用脚本把CHAR类型字段全部转换成VARCHAR2类型,同时截掉字符串的空格,如下:
    declare
    begin
        for c in (select *
                      from user_tab_columns t1
                     where t1.DATA_TYPE = 'CHAR'
                   ) loop
            execute immediate  'alter table ' || c.table_name || ' add g_w_' || c.column_name || ' varchar2(' || c.char_length || ')'; 
            execute immediate  'update ' || c.table_name || ' set g_w_' || c.column_name || ' = ' || c.column_name;
            execute immediate  'update ' || c.table_name || ' set ' || c.column_name || ' = null';
            execute immediate  'alter table ' || c.table_name || ' modify ' || c.column_name || ' varchar2(' || c.char_length || ')';
            execute immediate  'update ' || c.table_name || ' set ' || c.column_name || ' = trim(g_w_' || c.column_name || ')';
            execute immediate  'alter table ' || c.table_name || ' drop column g_w_' || c.column_name;
        end loop;
    end;
      

  8.   


    字段类型不改,没办法实现
    只能在select的时候用trim去掉空格
      

  9.   

    确实是用replace(columnname,' ','')解决的,不过char字段里的好像不是空格,我从中截取了一段然后用的replace方法。谢谢各位的回答!