更新时间:2025-12-01 GMT+08:00
分享

获取字符串长度

DWS支持以下函数计算字符串的长度,包括获取位数字节数字符数。关于位数、字节数和字符数的区别可参见字符串处理函数和操作符总体介绍

表1 获取字符串长度常用函数

分类

功能

对应函数

简单示例

使用区别

获取位数

获取字符串的位数。

bit_length(string)

1
2
3
4
5
SELECT bit_length('world');
 bit_length
------------
         40
(1 row)

-

获取字节数

获取所有字符串类型的字节数。

octet_length(string)

1
2
3
4
5
SELECT octet_length('world');
 octet_length
------------
         5
(1 row)

octet_length(string)与lengthb(string)在功能上完全一致,在处理MySQL/DWS等跨平台数据库开发时,优先使用octet_length(string)lengthb(string)是为了兼容Oracle而设定的一个映射函数,仅在Oracle迁移业务使用

lengthb(text/bpchar)与lengthb(string)一致,只是特指入参为text或bpchar类型的情况。

获取所有字符串类型的字节数,仅为兼容Oracle。

lengthb(string)

1
2
3
4
5
SELECT lengthb('abc'::text);
lengthb
------------
        3
(1 row)

获取text、bpchar类型的字节数,仅为兼容Oracle。

lengthb(text/bpchar)

1
2
3
4
5
SELECT lengthb('abc'::CHAR(5));
lengthb
------------
        5
(1 row)

获取字符数

获取字符串的字符数。

char_length(string)或character_length(string)

length(string)

1
2
3
4
5
SELECT length('database');
 length 
--------
      8
(1 row)

length(string)功能与char_length(string)完全等价,写法更简洁。

获取指定编码格式的字符串的字符数。

length(string bytea, encoding name)

-

-

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)

length(string bytea, encoding name)

描述:获取指定编码格式的字符串的字符数。在指定的编码格式中,string必须是有效的。

返回值类型:integer

示例:

1
2
3
4
5
SELECT length('database', 'UTF8');
 length
--------
      8
(1 row)

相关文档