日期:2014-05-17  浏览次数:20948 次

急死了,求char(30)字段查询匹配的问题,有空格
表test,有个字段a,char(30),一条记录是'你好后面有空格             '(他会后补空格到30位)
直接用sql查询select * from test where a='你好后面有空格',可以返回记录
但是放到存储过程中就没有记录

open v_cur for
select * from test where a=v_a;

其中v_cur是输出cursor,v_a是输入,值为你好后面有空格,后面不带空格
真急人啊,怎么没有记录啊

另外不能用trim(a)这样子,表A是上千万上亿的数据量,用trim做查询要全表扫描,肯定死翘翘
------最佳解决方案--------------------
可以在伪列 trim(a) 上建一个索引,满足你用trim
------其他解决方案--------------------
这种问题最麻烦了,把char改成varchar2吧
alter table test modify (a varchar2(30));
------其他解决方案--------------------
引用:
表test,有个字段a,char(30),一条记录是'你好后面有空格             '(他会后补空格到30位)
直接用sql查询select * from test where a='你好后面有空格',可以返回记录
但是放到存储过程中就没有记录

open v_cur for
select * from test where a=v_a;

其中v_cur是输出cursor……


oracle1的文档上都是建议把char改成varchar2的
lz也改一下吧
------其他解决方案--------------------
不改表结构那只能用like了
------其他解决方案--------------------
建议修改字段的数据类型 char-->varchar2

在确定数据的长度的话用char,效率高;
不确定数据的长度用varchar2,节省空间。
现在都是说以空间换时间,char和varchar2用哪个好?高人指点一下
------其他解决方案--------------------
成千万上亿的表,表名叫test,用char存储字符,对吧。

那急个毛啊。
------其他解决方案--------------------
 改类型