本文介绍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)