Oracle使用——varchar2() 和 char()关联查询 存在空格
背景
- 表dbcontinfo
- 字段loanid,类型为varchar2(60)
- 表dbloanbal
- 字段loanid,类型为char(60)
- loanid字段实际长度为24位
问题
- 两张表dbloanbal和dbcontinfo进行left关联查询,从表的数据查询不出来,值为null,sql如下
- select n.listid,n.loanacno,n.loanid,w.bailorname from dxLoanBal n left join dbcontinfo w on w.loanid=n.loanid;
- 查询出来的 bailorname 字段值为null
原因
- 在oracle数据库中,varchar2()的长度是可以随着存入字段的长度改变,而char()是固定的,不足的使用空格替代。
- 在dbloanbal中loanid字段存在空格,导致关联条件失效。
解决问题
- 使用trim()函数去掉空格之后查询:select n.listid,n.loanacno,n.loanid,w.bailorname from dxLoanBal n left join dbcontinfo w on w.loanid=trim(n.loanid);
扩展:oracle中varchar2()和char()的区别
- varchar2()
- 长度是可变的。设置的是varchar(60),但是当存储进入的字符串长度为24,实际存储的长度为24。如果还有长度为25的字段存入,这时这个字段的长度为25,而长度为24的那个字段依旧为24。字段读取效率没有char()高。
- char()
- 长度固定。设置的是char(60),但是当存储进入的字符串长度为24,实际存储的长度为60,其中有36个空格。但是因为长度不变,数据库读取效率高。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」