表A 中有个字段 cid char(40) 是主键现在直接 select * from A
cid
HRPMP00000000046
HRPMP00000000047
HRPMP00000000048但是 select * from A where cid='HRPMP00000000046' 却查不出数据。
select * from A where cid like 'HRPMP00000000046'
select * from A where cid = trim('HRPMP00000000046')
select * from A where trim(cid) = 'HRPMP00000000046' 这3种方式都有可以查出数据。
因为平台问题 默认会生成 select * from A where cid='HRPMP00000000046' 这种方式,求解这是为什么?百度知道:http://zhidao.baidu.com/link?url=6FQ2FJfP5GCPd7JoMqCzDELCFQfgb1i6G9t8n0_0ROYJ72Hal9jJoeJmbVRBaVtwZgl41qXU3O9S8hYQVnE4ua,这个问题的情况和我的 正好相反啊。 大神呢
cid
HRPMP00000000046
HRPMP00000000047
HRPMP00000000048但是 select * from A where cid='HRPMP00000000046' 却查不出数据。
select * from A where cid like 'HRPMP00000000046'
select * from A where cid = trim('HRPMP00000000046')
select * from A where trim(cid) = 'HRPMP00000000046' 这3种方式都有可以查出数据。
因为平台问题 默认会生成 select * from A where cid='HRPMP00000000046' 这种方式,求解这是为什么?百度知道:http://zhidao.baidu.com/link?url=6FQ2FJfP5GCPd7JoMqCzDELCFQfgb1i6G9t8n0_0ROYJ72Hal9jJoeJmbVRBaVtwZgl41qXU3O9S8hYQVnE4ua,这个问题的情况和我的 正好相反啊。 大神呢
如果你在插入“HRPMP00000000046”时,数据库中的数据实际为“HRPMP00000000046 ”楼主如连接下char,与varchar2之间的区别就明白了
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了
可是现在表的字段类型我无权更改,char(40)还得用char(40),而这中间件自动生成的就是 select * from A where cid='HRPMP00000000046',导致检索不出数据。
varchar2 类型就不存在这个问题。呵呵
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了
可是现在表的字段类型我无权更改,char(40)还得用char(40),而这中间件自动生成的就是 select * from A where cid='HRPMP00000000046',导致检索不出数据。
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了
可是现在表的字段类型我无权更改,char(40)还得用char(40),而这中间件自动生成的就是 select * from A where cid='HRPMP00000000046',导致检索不出数据。建议两种方法:
1、select * from A where cid=rpad('HRPMP00000000046',40,' ');
2、select * from A where trim(cid)='HRPMP00000000046';