代码之家  ›  专栏  ›  技术社区  ›  Richasantos

ORACLE|SUBSTR函数不工作

  •  2
  • Richasantos  · 技术社区  · 10 年前

    我对SUBSTR函数有问题。

    想象一下桌子( 表1 ):

    ABC_DEF   DESCRIPTION
    --------  -------------
    0999      TEST INFO
    

    如果我执行此查询:

    SELECT * FROM TABLE1 
    WHERE 
    (
         ABC_DEF = '0999'
    )
    

    我得到以下结果:

    ABC_DEF说明
    --------  -------------
    0999测试信息
    

    但是,如果我这样做:

    SELECT * FROM TABLE1 
    WHERE 
    (
         ABC_DEF = SUBSTR('00000999', 5, 4)
    )
    

    我得到0个结果。我完全不理解这种行为。属性ABC_DEF是一个字符(8)。

    1 回复  |  直到 10 年前
        1
  •  6
  •   MT0    10 年前

    A. CHAR(8) 列将用空格右填充值( CHR(32) )字符,直到其长度为8。

    SQL Fiddle

    Oracle 11g R2架构设置 :

    CREATE TABLE table1 ( ABC_DEF CHAR(8), DESCRIPTION VARCHAR2(20) );
    
    INSERT INTO table1 VALUES ( '0999', 'TEST INFO' );
    

    查询1 :

    SELECT * FROM TABLE1 
    WHERE ABC_DEF = '0999'
    

    Results :

    |  ABC_DEF | DESCRIPTION |
    |----------|-------------|
    | 0999     |   TEST INFO |
    

    问题2 :

    SELECT * FROM TABLE1 
    WHERE ABC_DEF = SUBSTR('00000999', 5, 4)
    

    Results :

    问题3 :

    SELECT * FROM TABLE1 
    WHERE ABC_DEF = RPAD( SUBSTR('00000999', 5, 4), 8, ' ' )
    

    Results :

    |ABC_DEF|说明|
    |----------|-------------|
    |0999|测试信息|