oracle中的substrb()函数怎么使用??请达人指教!!!

解决方案 »

  1.   

    substr(目标字符串,起始位置,子串长度)
    例如1234567890
    想截取890
    select substr('1234567890',8,3) from dual
      

  2.   

    .....
    谢谢,不过你好想看掉了一个b是substrb();不是substr();这两个用法是不一样的.
      

  3.   

      STBSTR(,<i>[,])
      c1为一字符串,i,j为整数,从c1的第i位开始返回长度为j的子字符串,如果j为空,则直到串的尾部。
    select SUBSTR('Message',1,4) from dualSUBSMess  SUBSTRB(,<i>[,])
      与SUBSTR大致相同,只是I,J是以字节计算。
    刚才试了一下,不管源数据是字符还是数字都是相同的结果,不知道why了 
      

  4.   


    在我的机器上是这样的,一个汉字占3个字节
    SQL> select substr('你真的好吗',-3) from dual;的好吗SQL> select substrb('你真的好吗',-3) from dual;吗SQL> select substr('abcde',-3) from dual;cdeSQL> select substrb('abcde',-3) from dual;cde
      

  5.   

    一个汉字占2个字节 好不??樓上的
    SQL>   select   substrb('你真的好吗',-2)   from   dual; 吗 
      

  6.   

    to 4楼的
    你和toad仔细看一下,其实返回了三个字节" 吗"
    只不过"吗"前面的那个字节显示不出来,为空字符
      

  7.   

    to 4楼的
    你和toad仔细看一下,其实返回了三个字节" 吗"
    只不过"吗"前面的那个字节显示不出来,所以显示为空格字符
      

  8.   

    最终好像还是没有人说出substr和substrb的区别啊
      

  9.   

    substr一个汉字一个字节
    substrb一个汉字两个字符不过要看数据本身设置参数如何
      

  10.   

    substr按字,substrb按byte 就这么简单,至于substr里面汉字什么编码几位,那是由数据加的字符集决定的
    要理解数据加中 varchar(4000)就是按b计算的,所以就算是汉字,估计也存不了4000个字汉字
      

  11.   

    substr()是按字截取
    substrb()是按位截取
      

  12.   

    substr()是按字截取
    substrb()是按位截取
      

  13.   

    substr按字,substrb按byte 就这么简单,其它看情况
      

  14.   

    see it!Syntax
    substr::= 
    Text description of substr
    Purpose
    The "substring" functions return a portion of string, beginning at character position, substring_length characters long. SUBSTR calculates lengths using characters as defined by the input character set. SUBSTRB uses bytes instead of characters. SUBSTRC uses Unicode complete characters. SUBSTR2 uses UCS2 codepoints. SUBSTR4 uses UCS4 codepoints.If position is 0, then it is treated as 1. 
    If position is positive, then Oracle counts from the beginning of string to find the first character. 
    If position is negative, then Oracle counts backward from the end of string. 
    If substring_length is omitted, then Oracle returns all characters to the end of string. If substring_length is less than 1, then a null is returned. 
    string can be any of the datatypes CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB. The return value is the same datatype as string. Floating-point numbers passed as arguments to SUBSTR are automatically converted to integers.Examples
    The following example returns several specified substrings of "ABCDEFG":SELECT SUBSTR('ABCDEFG',3,4) "Substring"
         FROM DUAL;
     
    Substring
    ---------
    CDEFSELECT SUBSTR('ABCDEFG',-5,4) "Substring"
         FROM DUAL;Substring
    ---------
    CDEF
      

  15.   

    SUBSTRB(char, s[,l])
                  A substring of char, starting at character s, length l
                  The same as SUBSTR, except that 's', 'l' and the return value are expressed in bytes,
                  use for double-byte char sets
      

  16.   

    和substr差不错,不过就是在计算偏移量的时候,有差异,substr是以字符为单位。而substrb是以字节为单位。
      

  17.   

    在字符为单位不考虑到数据库编码的问题,而如果是substrb对于非ascii码的话,要考虑到数据库字符集的转换。
      

  18.   

    我也觉得自己弄去plsqldev里面运行一下就知道结果了
      

  19.   

    10G以后,oracle 汉字就占3个字节了
      

  20.   

    substrb 汉字占两位,数字和字母也占一位 
    substr 汉字占一位,数字和字母也占一位
      

  21.   


    substr 按字符来截取substrb按字节来截取
      

  22.   

    SQL> select substr('网易',1,2) from dual; 
    SUBS
    ----
    网易SQL> select substrb('网易',1,2) from dual;SU
    --
      

  23.   

    疑問的是既然知道有substr()這函數,為何不自己在pl/sql中測試一下呢?
      

  24.   


    SUBSTR calculates lengths using characters as defined by the input character set.
    SUBSTRB calculates lengths using bytes.
      

  25.   


    就是看数据库字符集,UTF-8的中文就是3个字节
      

  26.   

    呵呵,带b的都是按字节算的,不带的按字符算的。类似length和lengthb