Oracle Length 和 Lengthb 函数说明

 

一.官网的说明

 

http://download.oracle.com/docs/cd/E11882_01/server.112/e26088/functions088.htm#SQLRF00658

 

Purpose

The LENGTH functionsreturn the length of char. LENGTH calculates length usingcharacters as defined by the input character set. 

     --返回以字符为单位的长度.

LENGTHB usesbytes instead of characters. 

     --返回以字节为单位的长度.

LENGTHC usesUnicode complete characters. 

     --返回以Unicode完全字符为单位的长度.

LENGTH2 usesUCS2 code points. 

     --返回以UCS2代码点为单位的长度.

LENGTH4 usesUCS4 code points.

    --返回以UCS4代码点为单位的长度.

 

char can beany of the data types char, varchar2, nchar, nvarchar2, clob,or nclob.

The exceptionsare LENGTHC, LENGTH2, and LENGTH4, which do not allow char tobe a CLOB or NCLOB. The return value is of data type NUMBER.If char has data type CHAR, then the length includes all trailingblanks. If char is null, then this function returns null.

 

Restriction on LENGTHB (Lengthb函数的限制)

The LENGTHB functionis supported for single-byte LOBs only. It cannot be used with CLOB and NCLOB datain a multibyte character set.

 

Examples

The followingexample uses the LENGTH function using a single-byte databasecharacter set:

 

SELECT LENGTH('CANDIDE') "Length incharacters" FROM DUAL;

 

Length in characters

--------------------

7

 

The next example assumes a double-bytedatabase character set.

 

SELECT LENGTHB ('CANDIDE') "Length inbytes" FROM DUAL;

 

Length in bytes

---------------

14

 

二.示例说明

在不同的数据库,因为字符集的不同,LENGTHB得到的值可能会不一样。如ZHS16GBK采用两个byte位来定义一个汉字。而在UTF8,采用3个byte。

 

SYS@anqing1(rac1)> SELECT USERENV('LANGUAGE') FROM DUAL;

 

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

 

 

SQL>select length('安庆') from dual;

2

SQL>select lengthb('安庆') from dual;

4

 

SQL>select length('AnQing') from dual;

6

SQL>select lengthb('AnQing') from dual;

6

 

通过这个示例,我们可以看出来,Length 和 Lengthb 函数的一个重要用处,就是用来判断记录值里是否有中文内容。

 

如果有中文,那么Length() != Lengthb()

如果没有中文,那么Length() == Lengthb()

 

 

 

 

 

 

-------------------------------------------------------------------------------------------------------

QQ:492913789

Email:ahdba@qq.com

Blog:  http://www.cndba.cn/dave

Weibo:   http://weibo.com/tianlesoftware

Twitter:  http://twitter.com/tianlesoftware

Facebook: http://www.facebook.com/tianlesoftware

Linkedin: http://cn.linkedin.com/in/tianlesoftware

DBA1 群:62697716(满);   DBA2 群:62697977(满)  DBA3 群:62697850(满)  

DBA 超级群:63306533(满);  DBA4 群:83829929(满) DBA5群: 142216823(满) 

DBA6 群:158654907(满)   DBA7 群:69087192(满)  DBA8 群:172855474

DBA 超级群2:151508914  DBA9群:102954821     聊天 群:40132017(满)

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

<think>好的,我现在需要回答用户关于Oracle数据库LENGTH函数的使用说明示例的问题。首先,我要确认用户的具体需求,他们可能想知道LENGTH函数的基本用法、与LENGTHB的区别、支持的字符数据类型以及实际应用场景。根据提供的引用内容,我需要整理这些信息,并确保符合系统级指令的要求,比如正确使用LaTeX格式、生成相关问题等。 首先,引用[3]提到LENGTH函数返回字符串的长度,支持多种数据类型,如CHAR、VARCHAR2等。引用[1][2]则强调了LENGTHLENGTHB的区别,后者计算字节数。引用[4]补充了其他字符串函数的信息,可能需要在相关问题中提及。接下来,我需要将这些信息结构化,分点说明,并加入示例代码。同时,注意中文字符的正确使用,避免语法错误。最后,生成相关问题时要覆盖函数的区别、应用场景常见错误处理。确保所有数学表达式如$LENGTH('Oracle')$使用正确的格式,独立公式如性能对比用$$...$$。检查引用标识是否正确添加,例如在说明LENGTHB时引用[1][2]。完成这些步骤后,再通读一遍确保逻辑清晰,没有遗漏关键点。</think>### Oracle LENGTH函数使用说明 #### 1. **功能定义** - **LENGTH函数**用于返回字符串的**字符个数**,支持的数据类型包括`CHAR`、`VARCHAR2`、`NCHAR`、`NVARCHAR2`、`CLOB`、`NCLOB`等[^3]。 - 与`LENGTHB`不同,`LENGTHB`计算的是字符串的**字节数**(取决于字符编码)[^1][^2]。例如: - 单字节字符集(如`ASCII`)中,两者结果相同。 - 多字节字符集(如`UTF-8`)中,一个汉字占3字节,此时`LENGTHB`值为`LENGTH`的3倍。 #### 2. **语法** ```sql LENGTH(char_expression) ``` - **参数**:`char_expression`可以是字符串常量、列名或变量。 - **返回值**:整数,表示字符数量。 #### 3. **示例** 1. **基础用法**: ```sql SELECT LENGTH('Oracle') AS str_length FROM dual; -- 结果: 6 ``` 2. **处理含空格的字符串**: ```sql SELECT LENGTH(' Hello ') AS length_with_space FROM dual; -- 结果: 7(包含前后空格) ``` 3. **与LENGTHB对比**(假设数据库字符集为`UTF-8`): ```sql SELECT LENGTH('数据库') AS char_length, -- 结果: 3 LENGTHB('数据库') AS byte_length -- 结果: 9 (3字符 × 3字节) FROM dual; ```[^1] 4. **结合TRIM去空格后计算**: ```sql SELECT LENGTH(TRIM(' Data ')) AS trimmed_length FROM dual; -- 结果: 4(去除前后空格后的字符数) ``` #### 4. **常见应用场景** - 数据清洗:验证字段长度是否符合约束(如手机号固定11位)。 - 编码转换:通过`LENGTH``LENGTHB`判断字符串是否包含多字节字符。 - 逻辑判断:在`WHERE`子句中筛选特定长度的数据,例如: ```sql SELECT * FROM employees WHERE LENGTH(name) > 10; ``` #### 5. **注意事项** - **NULL值处理**:若输入为`NULL`,函数返回`NULL`。 - **大对象支持**:对`CLOB`类型可能需注意性能影响。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值