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個空格。但是因為長度不變,數據庫讀取效率高。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM