最近在pl/sql developer中做了关于oracle中substrb函数的应用,发现了一些奇怪现象.请教各位先知.
select substrb('大小abc',1,2) from dual;
运行出结果为: '  '  (两个空格)substrb('大小abc',1,3)   结果为: '大'
substrb('大小abc',1,4)   结果为: '大 '    (包含一个空格)
substrb('大小abc',1,5)   结果为: '大  '   (包含两个空格)
substrb('大小abc',1,6)   结果为: '大小'以为是developer的问题,换用sql*plus做,问题依旧.按道理说一个汉字应占两个字节,可我做出来的却不是这样.
不知哪位也遇到过我这中情况.

解决方案 »

  1.   

    可能是数据库字符集设置有关,我的就很正常。。SQL> select substrb('大小abc',1,2) from dual; SU
    --
    大SQL> select substrb('大小abc',1,3) from dual;SUB
    ---
    大SQL> select substrb('大小abc',1,4) from dual;SUBS
    ----
    大小SQL> select substrb('大小abc',1,5) from dual;SUBST
    -----
    大小aSQL> select substrb('大小abc',1,6) from dual;SUBSTR
    ------
    大小abSQL> 
      

  2.   


    SQL> select substrb('大小abc',1,3) from dual;
     
    SUBSTRB('大小ABC',1,3)
    ----------------------

     
    SQL> select substrb('大小abc',1,4) from dual;
     
    SUBSTRB('大小ABC',1,4)
    ----------------------
    大小
     
    SQL> select substrb('大小abc',1,5) from dual;
     
    SUBSTRB('大小ABC',1,5)
    ----------------------
    大小a
     
    SQL> select substrb('大小abc',1,6) from dual;
     
    SUBSTRB('大小ABC',1,6)
    ----------------------
    大小ab
    事实证明,是你那边的问题
      

  3.   

    NLS_CHARACTERSET    ZHS16GBKAmerican_America.zhs16gbk
      

  4.   

    NLS_CHARACTERSET               ZHS16GBK
      

  5.   

    恩,查了下资料才知道. utf8字符集 汉字占三个字节.
    谢了,结贴.人人有分.
      

  6.   


    干嘛不用substr 而用 substrb
      

  7.   

    干嘛不用substr 是以字符为单位计算  小和a 都算1而用 substrb 是以字节为单位  a算1, 小就要根据服务器的数据库字符集来判断了。
      

  8.   

    呵呵,以前就是因为用的都是substr才不知道substrb操作还有这几个要注意的地方.不然我永远都不知道是怎么回事.