zoukankan      html  css  js  c++  java
  • 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个空格。但是因为长度不变,数据库读取效率高。
  • 相关阅读:
    WSL+vscode安装rust注意事项
    几种判断质数的算法
    select被遮挡问题
    idea工具使用
    docker部署nexus服务
    docker部署nacos
    springcloudAlibaba整合nacos
    Navicat_Premium_v15 激活
    CF295D Solution
    CF351B Solution
  • 原文地址:https://www.cnblogs.com/zuiyue_jing/p/9143258.html
Copyright © 2011-2022 走看看