Oracle的LENGTH函数是计算字符串长度的核心工具。不过要小心,它和它的"家族成员"(如LENGTHB)在计算单位上有所区别,简单使用容易出错。下面会为你详细拆解它们的区别和用法。
📏 先搞懂:LENGTH vs LENGTHB
它们最核心的区别在于单位不同,LENGTH 计算的是"字符数",LENGTHB 计算的是"字节数"。在处理英文等单字节字符时,两者通常结果一致;但在处理中文等多字节字符时,两者的结果就会有明显差别了。
| 计算方式 | 适用场景 | 关键特性 | 适用数据类型 |
|---|---|---|---|
| LENGTH | 计算字符个数,与字符集无关 | 以"字符"为逻辑单位返回长度 | CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB |
| LENGTHB | 计算字节数,常用于处理中文字符 | 以"字节"为物理单位返回长度 | CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB (但多字节字符集下的LOB有限制) |
| LENGTHC | 处理Unicode 全字符 | 使用Unicode完全字符 | CHAR, VARCHAR2, NCHAR, NVARCHAR2 (不支持CLOB或NCLOB) |
| LENGTH2 | 处理UCS2编码 | 使用UCS2字符集编码点 | CHAR, VARCHAR2, NCHAR, NVARCHAR2 (不支持CLOB或NCLOB) |
| LENGTH4 | 处理UCS4编码 | 使用UCS4字符集编码点 | CHAR, VARCHAR2, NCHAR, NVARCHAR2 (不支持CLOB或NCLOB) |
🚀 常见用法与实战
1. 基础示例
直接理解函数的行为。
sql
--查询常量字符串的长度
SELECT LENGTH('Hello Oracle') AS str_len FROM DUAL;
--返回: 12
--查询表中某列的长度(如员工名字)
SELECT last_name, LENGTH(last_name) AS len FROM employees;
2. 字符集编码差异(典型案例)
这是实际工作中最容易混淆的点,通过对比可以清晰看到多字节字符的影响。
sql
--对比中文字符串的长度
SELECT LENGTH('你好世界') AS char_len, --按字符计算,返回4
LENGTHB('你好世界') AS byte_len --按字节计算,若数据库是UTF-8,则返回12
FROM DUAL;
--根据字符集,如UTF-8(每个汉字3字节)或GBK(每个汉字2字节),结果不同\[reference:5\]