zoukankan      html  css  js  c++  java
  • ORACLE中关于 char 和 varchar2 的比较

    先建表做一个测试:

    CREATE TABLE TT(CHAR2 CHAR(2) , VARC2 VARCHAR2(2)), CHAR2 CHAR(3) ;
    INSERT INTO TT VALUES('A','A','A') ;
    INSERT INTO TT VALUES('A','A ','A') ;
    COMMIT ;

    1、CHAR 类型 与 CHAR型 比较,补齐空格。也就是说,CHAR 与 CHAR 类型比较时,不管各自定义的长度是多少,都能等。

    SELECT * FROM TT WHERE TT.CHAR2 = TT.CHAR3
    
    CHAR2 VARC2 CHAR3
    ----- ----- -----
    A A A
    A A A

    2、CHAR与字符常量的比较,补齐空格。也就是说,常量后边不用加空格也能匹配CHAR类型,不管CHAR定义的长度是多少。

    SELECT * FROM TT WHERE TT.CHAR2 = 'A' ;
    
    SELECT * FROM TT WHERE TT.CHAR3 = 'A' ;
    CHAR2 VARC2 CHAR3
    ----- ----- -----
    A A A
    A A A  

    3、VARCHAR2 与常量比较,不处理空格,也就是说,如果你的数据中有空格,是找不出来的。如下,只能找到  'A'  的,而找不到  'A '  的。(第二个A后面有一个空格)

    SELECT * FROM TT WHERE TT.VARC2 = 'A' ;
    
    CHAR2 VARC2 CHAR3
    ----- ----- -----
    A     A     A

    4、当CHAR类型和VARCHAR2类型比较时,比较时对字段值不作处理,直接比较。 也就是说,如果字符长度不一样,VARCHAR2 需要补齐空格,或者 CHAR 需要去掉空格才能相等。

    SELECT * FROM TT WHERE TT.CHAR2 = TT.VARC2;
    
    CHAR2 VARC2 CHAR3
    ----- ----- -----
    A     A     A                ---只找出了相同的列,(有空格的‘A ’查不出来)

    5、怎么处理不同表中,根据不同场景所定义的  VARCHAR2 与 CHAR 的匹配呢?

    两种方法:

    5.1  用RPAD 对 VARCHAR2 补齐长度,以上表为例

    SELECT * FROM TT WHERE RPAD(TT.VARC2 ,2 ,' ' )  = TT.CHAR2;
    
    CHAR2 VARC2 CHAR3
    ----- ----- -----
    A     A     A
    A     A     A

    5.2 用TRIM 函数对 VARCHAR2 和 CHAR 去空格。

    SELECT * FROM TT WHERE TRIM(TT.VARC2)  =  TRIM(TT.CHAR2);
    
    CHAR2 VARC2 CHAR3
    ----- ----- -----
    A     A     A
    A     A     A

    大家可以根据自己的需求,选择其中一种进行转换。

    小TIPS:如果该列建立了索引,则建议使用 VARCHAR2 补齐空格的方法与 CHAR 进行匹配,而不建议使用带函数的索引。

    如果不涉及索引,两种方法都可以。

      

  • 相关阅读:
    uboot的仓库在哪里?
    git如何查看执行过的历史git命令
    for(;;)和while(true)的区别
    CountDownLatch的理解和使用
    countDownLatch
    websocket @ServerEndpoint(value = "/websocket/{ip}")详解
    Java原子性操作之——Atomic包的原理分析
    CAS原理
    java线程池ThreadPoolExecutor的keepAliveTime=0时,表示超过core线程数的线程在空闲时立即结束!!!
    ThreadPoolExecutor 线程池Demo
  • 原文地址:https://www.cnblogs.com/yhoralce/p/7666045.html
Copyright © 2011-2022 走看看