获取字符串长度
DWS支持以下函数计算字符串的长度,包括获取位数、字节数和字符数。关于位数、字节数和字符数的区别可参见字符串处理函数和操作符总体介绍。
|
分类 |
功能 |
对应函数 |
简单示例 |
使用区别 |
||
|---|---|---|---|---|---|---|
|
获取位数 |
获取字符串的位数。 |
|
- |
|||
|
获取字节数 |
获取所有字符串类型的字节数。 |
|
octet_length(string)与lengthb(string)在功能上完全一致,在处理MySQL/DWS等跨平台数据库开发时,优先使用octet_length(string),lengthb(string)是为了兼容Oracle而设定的一个映射函数,仅在Oracle迁移业务使用。 lengthb(text/bpchar)与lengthb(string)一致,只是特指入参为text或bpchar类型的情况。 |
|||
|
获取所有字符串类型的字节数,仅为兼容Oracle。 |
|
|||||
|
获取text、bpchar类型的字节数,仅为兼容Oracle。 |
|
|||||
|
获取字符数 |
获取字符串的字符数。 |
|
length(string)功能与char_length(string)完全等价,写法更简洁。 |
|||
|
获取指定编码格式的字符串的字符数。 |
- |
- |
bit_length(string)
描述:字符串的位数。返回结果为字节数乘以8,得到总位数。字符串的位数取决于数据库编码方式,例如GBK字符编码下,一个中文为2个字节,UTF8和SQL_ASCII字符编码下,一个中文字为3个字节。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT bit_length('world'); bit_length ------------ 40 (1 row) |
GBK字符编码下,示例:
1 2 3 4 5 |
SELECT bit_length('我们'); bit_length ------------ 32 (1 row) |
UTF8和SQL_ASCII字符编码下,示例:
1 2 3 4 5 |
SELECT bit_length('我们'); bit_length ------------ 48 (1 row) |
octet_length(string)
描述:获取字符串中的字节数。该函数返回字符串的字节数,对于处理多字节字符(如 UTF-8 编码的汉字、特殊符号等)非常重要,它能准确获取字符串的存储大小。
返回值类型:integer
示例:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT octet_length('data'); octet_length -------------- 4 (1 row) SELECT octet_length('数据库'); octet_length -------------- 9 (1 row) |
lengthb(string)
描述:获取字符串的字节长度。功能与octet_length(string)没有任何差别,只是为兼容Oracle而存在,如果是从Oracle迁移过来的场景,请使用lengthb(string),但如果业务需要跨数据库运行(如同时兼容DWS和MySQL),请使用octet_length(string),因为MySQL没有lengthb函数。
返回结果与字符集有关,同样的中文字符,在GBK与UTF8中,返回的字节数不同。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT lengthb('hello'); lengthb --------- 5 (1 row) |
lengthb(text/bpchar)
描述:获取指定字符串的字节数,入参支持text、bpchar(等同于CHAR(n)),其中:
- lengthb(text)表示计算实际字符的字节长度(无填充空格),适合绝大多数业务场景。
- lengthb(bpchar)表示计算固定长度字符串的字节长度(包含填充空格),适合严格定长场景(如固定长度的编码、证件号),不推荐日常使用(空格填充易引发隐式问题)。
返回值类型:integer
- 若字符串中存在换行符,如字符串由一个换行符和一个空格组成,在DWS中LENGTH和LENGTHB的值为2。
- 此函数获取的为指定字符串的字节数,对于多字节字符编码,一个字符可能占用多个字节(例如,UTF-8编码中,中文字符通常占用3个字节)。
示例:
1 2 3 4 5 |
SELECT lengthb('hello'); lengthb --------- 5 (1 row) |
入参为text类型和bpchar类型的示例对比如下:
1 2 3 4 |
-- 案例1: 使用 text 类型 SELECT lengthb('abc'::text); -- 'abc'占用3字节(UTF-8),返回3 -- 案例2: 使用 bpchar (CHAR(5)) 类型 SELECT lengthb('abc'::CHAR(5)); -- 存储为 'abc ', 返回5(每个空格占1字节) |

UTF8编码中,示例:
1 2 3 4 5 |
SELECT lengthb('数据库'); lengthb --------- 9 (1 row) |
char_length(string)或character_length(string)
描述:获取字符串中的字符个数。
返回值类型:integer
对于多字节字符编码,一个字符可能占用多个字节(例如,UTF-8编码中,中文字符通常占用3个字节)。
示例:
1 2 3 4 5 6 7 8 9 10 11 |
SELECT char_length('hello'); char_length ------------- 5 (1 row) SELECT char_length('数据库'); char_length ------------- 9 (1 row) |
length(string)
描述:获取字符串的字符长度(字符数量),length(string)功能与char_length(string)完全等价,写法更简洁。
返回值类型:integer
示例:
1 2 3 4 5 |
SELECT length('database'); length -------- 8 (1 row) |