要添加个功能新建了一个表,其中身份证字段  SFZMHM 是CHAR(255) 里面上万条数据。
    在本地做实验的时候oracle在数据不满长度的情况下会自动补空格吧?
当SFZMHM是char(255)的时候
select * from YYKS_DRV_FORBID WHERE SFZMHM = '450821198601105832'  //这句查不到当SFZMHM是char(18)的时候
select * from YYKS_DRV_FORBID WHERE SFZMHM = '450821198601105832'
就可以查的到有2个方法解决
1:string SFZMHM= this.txtCardNum.Text.ToString().Trim() +"(237个空格)"   //这样可以查到
2:就是把数据库字段类型改了,先改成varchar2(255),成功直接改成varchar2(18)提示错误说有数据过长。要写一个什么样的句子把这个字段(SFZMHM)的237个空格去掉呢?谢谢高手们帮忙啊!!

解决方案 »

  1.   

    100分?先update更改记录,
    update YYKS_DRV_FORBID set SFZMHM = trim(SFZMHM);

    update YYKS_DRV_FORBID set SFZMHM = substr(SFZMHM, 1, 18);然后改字段类型
    alter table YYKS_DRV_FORBID modify SFZMHM varchar2(18);
      

  2.   

    对于存储变长的数据字段,建议还是用Varchar2类型比较合适,不会后补空格。
      

  3.   

    可以先修改成Varchar2(128),然后去掉字符串尾部后补的空格,再将字段修改成varchar2(18)。
      

  4.   


    我就是想去掉空格,手动去?上万条数据啊大哥------------------------------------------------------------
    lpc19598188:
    先update更改记录, 
    update YYKS_DRV_FORBID set SFZMHM = trim(SFZMHM); 
    再 
    update YYKS_DRV_FORBID set SFZMHM = substr(SFZMHM, 1, 18); 
    更新之后还是char(255)类型,还是会自动补255;
    alter table YYKS_DRV_FORBID modify SFZMHM varchar2(18);不了啊
      

  5.   

    有2个方法解决 
    1:string SFZMHM= this.txtCardNum.Text.ToString().Trim() +"(237个空格)"  //这样可以查到 但这样会不会影响速度?
      

  6.   

    sorry,
    应该是先改表结构
    alter table YYKS_DRV_FORBID modify SFZMHM varchar2(255);再update更改记录,
    update YYKS_DRV_FORBID set SFZMHM = trim(SFZMHM);
    或截断
    update YYKS_DRV_FORBID set SFZMHM = substr(SFZMHM, 1, 18); 提交update:
    commit;如果想要18的长度,再执行
    alter table YYKS_DRV_FORBID modify SFZMHM varchar2(18);
      

  7.   

    两种方法
    1、select * from YYKS_DRV_FORBID  where trim(sfzmhm)='450821198601105832';
    create index ind_t on YYKS_DRV_FORBID(trim(SFZMHM) );2、create table temp_t as select  .., trim(sfzmhm) sfzmhm,.. from YYKS_DRV_FORBID;
    truncate table YYKS_DRV_FORBID;
    alter table YYKS_DRV_FORBID modify sfzmhm varchar2(18);
    insert into YYKS_DRV_FORBID as select * from temp_t;
    drop table temp_t;
      

  8.   


    先修改表结构,将数据类型从char转为varchar2,然后用update语句结合trim()函数去除空格。
      

  9.   

    方案一:
    改字段类型
    alter table tab_name modify SFZMHM varchar2(255);
    update tab_name
      set SFZMHM = trim(SFZMHM);
    commit;方案二:
    查询的时候采用like, 
    select * from YYKS_DRV_FORBID WHERE SFZMHM like '450821198601105832%'