`

LENGTHB & LENGTH,SUBSTRB & SUBSTR, INSTRB & INSTR

阅读更多
这篇主要介绍三对关于字符函数和字节函数:
1.LENGTHB & LENGTH FUNCTION:
 
SQL> SELECT LENGTHB('我A')AS BYTE_LEN,LENGTH('我A') AS WORD_LEN FROM DUAL;
BYTE_LEN   WORD_LEN
---------- ----------
         4          2

2.SUBSTRB & SUBSTR FUNCTION:
 
SQL> SELECT SUBSTRB('我ABC们', 1,3)AS BYTE_SUBSTR,SUBSTR('我ABC们',1,3) AS WORD_SUBSTR    FROM DUAL;
BYTE_SUBSTR WORD_SUBSTR
----------- -----------
我          我AB


3. INSTRB & INSTR FUNCTION:
  SQL> SELECT INSTRB('我ABC们D','D',5,1) AS BYTE_INSTR, INSTR('我ABC们D','D',5,1) AS WORD_INSTR FROM DUAL;
BYTE_INSTR WORD_INSTR
---------- ----------
        10          6



下面简单介绍一下这三对函数的用法:

 ---F_GET_UTF8_LENGTH 为GBK编码字节长度(一个汉字,两个字节)
FUNCTION F_GET_UTF8_LENGTH(I_UTF8_STR IN VARCHAR2) RETURN INTEGER AS
    N_BYTE_LENGTH NUMBER(4) := 0;
    N_ASCII_LENGTH NUMBER(4) := 0;
  BEGIN
    N_BYTE_LENGTH := LENGTHB(I_UTF8_STR);
    N_ASCII_LENGTH := LENGTH(I_UTF8_STR);
    IF LENGTHB('人') = 3 AND N_BYTE_LENGTH > N_ASCII_LENGTH THEN
      RETURN (N_BYTE_LENGTH + N_ASCII_LENGTH) / 2;
    ELSE
      RETURN N_BYTE_LENGTH;
    END IF;
  END F_GET_UTF8_LENGTH;
 ---F_GET_UTF8_SUBSTR 为GBK编码字节子串(一个汉字,两个字节)
  FUNCTION F_GET_UTF8_SUBSTR(I_UTF8_STR IN VARCHAR2,
                             I_OFFSET IN OUT INTEGER,
                             I_LENGTH IN INTEGER) RETURN VARCHAR2 AS
    N_BYTE_LENGTH NUMBER(4) := 0;
    N_ASCII_LENGTH NUMBER(4) := 0;
    N_BYTE_LENGTH1 NUMBER(4) := 0;
    N_ASCII_LENGTH1 NUMBER(4) := 0;
    S_BYTE_STR VARCHAR2(500);
    S_ASCII_STR VARCHAR2(500);
    S_TMP_STR VARCHAR2(500);
  BEGIN
    N_BYTE_LENGTH := LENGTHB(I_UTF8_STR);
    N_ASCII_LENGTH := LENGTH(I_UTF8_STR);
    IF LENGTHB('人') = 3 AND N_BYTE_LENGTH > N_ASCII_LENGTH THEN
      S_BYTE_STR := SUBSTRB(I_UTF8_STR,
                            I_OFFSET,
                            I_LENGTH);
      S_ASCII_STR := SUBSTR(I_UTF8_STR,
                            I_OFFSET,
                            I_LENGTH);
      N_ASCII_LENGTH1 := LENGTH(S_BYTE_STR);
      IF LENGTHB(S_BYTE_STR) = LENGTHB(S_ASCII_STR) THEN
        S_TMP_STR := SUBSTRB(I_UTF8_STR,
                             I_OFFSET,
                             I_LENGTH);
        I_OFFSET := I_OFFSET + I_LENGTH;
        RETURN S_TMP_STR;
      ELSE
        N_BYTE_LENGTH1 := (3 * I_LENGTH - N_ASCII_LENGTH1) / 2;
        S_TMP_STR := SUBSTRB(I_UTF8_STR,
                             I_OFFSET,
                             N_BYTE_LENGTH1);
        I_OFFSET := I_OFFSET + N_BYTE_LENGTH1;
        RETURN S_TMP_STR;
      END IF;
    ELSE
      S_TMP_STR := SUBSTRB(I_UTF8_STR,
                           I_OFFSET,
                           I_LENGTH);
      I_OFFSET := I_OFFSET + I_LENGTH;
      RETURN S_TMP_STR;
    END IF;
  END F_GET_UTF8_SUBSTR;
  

分享到:
评论

相关推荐

    oracle中length、lengthb、substr、substrb函数用法介绍

    在Oracle数据库中,处理字符串时经常会用到几个关键的函数,包括`length`、`lengthb`、`substr`和`substrb`。这些函数在处理不同编码的字符串时尤其重要,因为不同的字符集(如UTF-8)可能会影响字符串的实际存储...

    Oracle常用函数.docx

    - LENGTHB() 返回字符串的字节数,对于单字节字符集,LENGTHB()等同于LENGTH()。 6. lower() 和 UPPER() - lower() 函数将字符串中的所有字符转换为小写,常用于WHERE子句中的模糊匹配,如LOWER(colorname) LIKE ...

    Oracle 汉字转全拼 拼音首字母

    --Select replace(substrb(dump(lv_char,1010),instrb(dump(lv_char,1010),'ZHS16GBK:')),'ZHS16GBK: ','') Into lv_bytes from dual; --li_pos:=instr(lv_bytes,','); --li_bytes:=substr(lv_bytes,1,li_pos-1)*...

    oracle函数的用法[定义].pdf

    6. **INSTRB函数**:与INSTR类似,但返回的是字节位置,适用于包含多字节字符的字符串。 7. **LENGTH函数**:LENGTH函数返回字符串的字符长度。例如,LENGTH('Oracle')将返回7。 8. **LENGTHB函数**:返回字符串的...

    常用oracle字符串操作函数

    11. **SUBSTRB()** 和 **LENGTHB()** 函数: 这两个函数与SUBSTR()和LENGTH()类似,但在处理包含多字节字符(如Unicode字符)的字符串时更精确。 12. **CHR()** 函数: CHR() 可以将ASCII码转换为对应的字符。...

    Oracle SQL培训笔记

    - **说明**: `Instr` 和 `Instrb` 用于在字符串中查找指定子串的位置,可以指定查找的起始位置和第几次匹配。如果没有找到匹配项,则返回 0。 - **示例**: 对于字符串 "abcabcdabcdef",`Instr('abcabcdabcdef', '...

    oracle中的函数总结

    INSTRB函数与INSTR类似,但它是基于字节而不是字符进行操作的。 ```sql SELECT INSTRB('CORPORATEFLOOR', 'OR', 5, 2) "Instringinbytes" FROM DUAL; ``` 此例中,从第5个字节开始查找第二个“OR”的位置(结果为27...

    oracle求字符串长度函数length()和hengthb()简介

    Oracle数据库还提供了许多其他字符串处理函数,例如`substr()`用于提取子字符串,`instr()`用于查找子字符串的位置,`upper()`和`lower()`用于大小写转换,`trim()`用于去除字符串两端的空白字符,`replace()`用于...

    oracle函数字符处理

    `INSTR(string, substr, [start_position, [occurrence]])` 返回substr在string中的起始位置,如果指定了occurrence,则返回第occurrence次出现的位置。 3. **REPLACE()** 函数:用于替换字符串中的特定子串。`...

    Oracle常用函数.pdf

    6. **INSTRB()**:与INSTR()类似,但返回的是字节数,尤其在处理多字节字符时非常有用。 7. **LENGTH()**:返回字符串`c1`的长度,如果字符串为NULL,返回NULL值。 8. **LENGTHB()**:与LENGTH()相同,但返回的是...

    Oracle数据库中单行字符串函数简介

    6. INSTRB() 函数:与INSTR()类似,但返回的是字节位置,适用于多字节字符集。 7. LENGTH() 函数:LENGTH()函数返回字符串的长度,以字符计。如果字符串为NULL,返回NULL。 8. LENGTHB() 函数:与LENGTH()相似,但...

    Oracle常用函数.txt

    - **INSTRB()** 类似于INSTR,但适用于字节级而非字符级,主要用于多字节字符集的处理。 ### LENGTH() 和 LENGTHB() - **LENGTH()** 函数返回字符串的长度(按字符计),如 `LENGTH('IpsoFacto')` 返回10。 - **...

    Oracle函数大全.pdf

    - **length/lengthb/lengthc/length2/length4**: 返回字符串的长度。 - **nlssort**: 按照特定的排序规则排序字符。 - **trim**: 删除字符串两端的特定字符。 ### 第二章 数值型函数 数值型函数主要处理数字数据。...

    ORACLE函数大全

    如果字符串中包含多字节字符,可以使用LENGTHB函数,它按字节返回长度。 7. LOWER和UPPER函数 LOWER函数将字符串中的所有字符转换为小写,而UPPER函数则转换为大写。比如,LOWER('AaBbCcDd')返回'aabbccdd',UPPER...

    plsql 函数简介

    8. **LENGTHb()**: 类似于LENGTH(),但计算字节数。 9. **LOWER()**: 这个函数将字符串转换为全小写,常用于WHERE子句中进行不区分大小写的搜索。 10. **LPAD(,[,])**: 这个函数在字符串c1的左侧填充字符c2,直到...

    FastFormula常用函数

    `INSTRB`与`INSTR`类似,但它是基于字节而不是字符的。这意味着在处理多字节字符集(如UTF-8)时,可能得到不同的结果。`INSTRB`函数在处理非拉丁文字符时尤为重要。 #### LEAST(expr, expr[, expr]) `LEAST`函数...

    Oracle函数大全

    6. **LENGTH(s)** 和 **LENGTHB(s)**:前者按字符计算,后者按字节计算,用于返回字符串`s`的长度。 - 示例:`LENGTH('Hello')` 返回 `5` 7. **LOWER(s)**:将字符串`s`转换为全小写。 - 示例:`LOWER('HELLO')` ...

Global site tag (gtag.js) - Google Analytics