Oracle SQL语句中char类型 比较

烟火~__~ 2013-09-18 12:07:00
表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,这个问题的情况和我的 正好相反啊。 大神呢
...全文
681 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiangagou 2013-09-22
  • 打赏
  • 举报
回复
trim(cid)把空格去了
无敌小二傻 2013-09-18
  • 打赏
  • 举报
回复
引用 楼主 wudan001 的回复:
表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,这个问题的情况和我的 正好相反啊。 大神呢
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了
烟火~__~ 2013-09-18
  • 打赏
  • 举报
回复
引用 1 楼 yinan9 的回复:
你这里是char(40)类型的,如果你插入的数据长度不足40,后便将以空格填满。 如果你在插入“HRPMP00000000046”时,数据库中的数据实际为“HRPMP00000000046 ” 楼主如连接下char,与varchar2之间的区别就明白了
where中cid='HRPMP00000000046' , char类型与常量比较时,oracle 不是自动会将常量右补齐空格后再比较的?
yinan9 2013-09-18
  • 打赏
  • 举报
回复
你这里是char(40)类型的,如果你插入的数据长度不足40,后便将以空格填满。 如果你在插入“HRPMP00000000046”时,数据库中的数据实际为“HRPMP00000000046 ” 楼主如连接下char,与varchar2之间的区别就明白了
无敌小二傻 2013-09-18
  • 打赏
  • 举报
回复
引用 6 楼 wudan001 的回复:
[quote=引用 3 楼 lyliu602 的回复:] [quote=引用 楼主 wudan001 的回复:] 表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,这个问题的情况和我的 正好相反啊。 大神呢
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了[/quote] 可是现在表的字段类型我无权更改,char(40)还得用char(40),而这中间件自动生成的就是 select * from A where cid='HRPMP00000000046',导致检索不出数据。[/quote]
引用 6 楼 wudan001 的回复:
[quote=引用 3 楼 lyliu602 的回复:] [quote=引用 楼主 wudan001 的回复:] 表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,这个问题的情况和我的 正好相反啊。 大神呢
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了[/quote] 可是现在表的字段类型我无权更改,char(40)还得用char(40),而这中间件自动生成的就是 select * from A where cid='HRPMP00000000046',导致检索不出数据。[/quote] 建议两种方法: 1、select * from A where cid=rpad('HRPMP00000000046',40,' '); 2、select * from A where trim(cid)='HRPMP00000000046';
请叫我-雷人 2013-09-18
  • 打赏
  • 举报
回复
char(40)固定长度40,不够会补空格。 varchar2 类型就不存在这个问题。呵呵
烟火~__~ 2013-09-18
  • 打赏
  • 举报
回复
引用 3 楼 lyliu602 的回复:
[quote=引用 楼主 wudan001 的回复:] 表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,这个问题的情况和我的 正好相反啊。 大神呢
oracle对于char类型,如果字符数不够的话,会在左边补空格,和常量比较,oracle也不会自动补全的。楼主可以用varchar2(40)类型,就可以自动补全了[/quote] 可是现在表的字段类型我无权更改,char(40)还得用char(40),而这中间件自动生成的就是 select * from A where cid='HRPMP00000000046',导致检索不出数据。
异常异长 2013-09-18
  • 打赏
  • 举报
回复
有空格 数据库给补齐了吧
异常异长 2013-09-18
  • 打赏
  • 举报
回复
有空格 数据可给补齐了吧

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧