要添加个功能新建了一个表,其中身份证字段 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个空格去掉呢?谢谢高手们帮忙啊!!
在本地做实验的时候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个空格去掉呢?谢谢高手们帮忙啊!!
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);
我就是想去掉空格,手动去?上万条数据啊大哥------------------------------------------------------------
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);不了啊
1:string SFZMHM= this.txtCardNum.Text.ToString().Trim() +"(237个空格)" //这样可以查到 但这样会不会影响速度?
应该是先改表结构
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);
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;
先修改表结构,将数据类型从char转为varchar2,然后用update语句结合trim()函数去除空格。
改字段类型
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%'