select length('sdf')from dual  --3
SELECT substr('sdf',0,1) FROM dual --s  //从第0位开始,取1个字符,就 取s
SELECT substr('sdf',1,1) FROM dual --s  //从第1位开始,取1个字符,还是s  ??这是为什么oracle里计算字符串是从第1 位开始还是从第0位也可以

解决方案 »

  1.   

    从1开始,自己测一下就行了:SQL> select substr('abcdef', 1, 2) from dual;SU
    --
    ab
      

  2.   

    呵呵,其实从负数位开始取也可以;
    可以做如下验证:
    SQL> select substr('abcdefgkopi',1,3) from dual;SUB
    ---
    abcSQL> select substr('abcdefgkopi',0,3) from dual;SUB
    ---
    abcSQL>  select substr('abcdefgkopi',-3,2) from dual;SU
    --
    opSQL>  select substr('abcdefgkopi',-3,5) from dual;SUB
    ---
    opi
      

  3.   

    从1开始
    不过如数是负数的话表示从后边开始读取
    select substr('adcdef',3) from dual  表示从前边读取三位
    adc
    select substr('adcdef',-3) from dual  表示从后边读取三位
    def