南大通用GBase 8a字符串字符长度函数CHAR_LENGTH、CHARACTER_LENGTH的用法和例子

本文介绍GBase 8a数据库集群,计算字符串【字符】长度的函数char_length的用法和例子。请注意区分其与length,字符串【字节】长度的差异。

语法

CHAR_LENGTH(str)
CHARACTER_LENGTH(str)

说明

返回字符串 str 的字符长度,以字符个数为单位。CHAR_LENGTH和CHARACTER_LENGTH是完全一样的,别名。

参数为NULL则返回null。

样例

ASCII字符

gbase> select char_length('123456');
+-----------------------+
| char_length('123456') |
+-----------------------+
|                     6 |
+-----------------------+
1 row in set (Elapsed: 00:00:00.00)

汉字

字符,是不考虑编码的。

gbase> select char_length('南大通用');
+-----------------------------+
| char_length('南大通用')     |
+-----------------------------+
|                           4 |
+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

与length的差别

对于多字节编码的字符,length返回的是字节长度,和编码长度有关,char_length是字符长度,与编码无关。

gbase> select length('南大通用');
+------------------------+
| length('南大通用')     |
+------------------------+
gbase> select bit_length('南大通用'),length('南大通用'),char_length('南大通用');
+----------------------------+------------------------+-----------------------------+
| bit_length('南大通用')     | length('南大通用')     | char_length('南大通用')     |
+----------------------------+------------------------+-----------------------------+
|                         96 |                     12 |                           4 |
+----------------------------+------------------------+-----------------------------+
1 row in set (Elapsed: 00:00:00.00)

可以看到每个UTF8编码汉字,占用3个字节。

character_length和char_length完全相同

gbase> select char_length('南大通用'),character_length('南大通用');
+-----------------------------+----------------------------------+
| char_length('南大通用')     | character_length('南大通用')     |
+-----------------------------+----------------------------------+
|                           4 |                                4 |
+-----------------------------+----------------------------------+
1 row in set (Elapsed: 00:00:00.00)

NULL参数返回null

gbase> select char_length(null);
+-------------------+
| char_length(null) |
+-------------------+
|              NULL |
+-------------------+
1 row in set (Elapsed: 00:00:00.00)

数字参数

先转成字符串再计算。包括科学计数法会先展开。如有小数点也算一个字符。

gbase> select char_length(1234567890);
+-------------------------+
| char_length(1234567890) |
+-------------------------+
|                      10 |
+-------------------------+
1 row in set (Elapsed: 00:00:00.00)
gbase> select char_length(1.23E4);
+---------------------+
| char_length(1.23E4) |
+---------------------+
|                   5 |
+---------------------+
1 row in set (Elapsed: 00:00:00.01)

gbase> select char_length(1.2345E4);
+-----------------------+
| char_length(1.2345E4) |
+-----------------------+
|                     5 |
+-----------------------+
1 row in set (Elapsed: 00:00:00.00)

gbase> select char_length(1.23456E4);
+------------------------+
| char_length(1.23456E4) |
+------------------------+
|                      7 |
+------------------------+
1 row in set (Elapsed: 00:00:00.00)

参考