SQL 方言通

首页 / 字符串

LENGTH 字符串长度

LENGTH 在不同引擎中统计的单位不同:StarRocks 和 Doris 的 LENGTH 返回字节数,一个汉字算 3;Hologres、Hive 和 Spark 的 LENGTH 返回字符数。按字符计数时,StarRocks 和 Doris 要改用 CHAR_LENGTH,Flink 也只有 CHAR_LENGTH。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持LENGTH(str)返回 BIGINT,输入不是 UTF-8 编码时返回 -1。按字节计算长度要用 LENGTHB。官方文档
Hologres支持LENGTH(str)按 UTF-8 字符计数,一个汉字、数字或字母都算 1,结果与 CHAR_LENGTH 相同。字节数用 OCTET_LENGTH。官方文档
StarRocks需改写char_length(str)LENGTH 返回的是字节数。按字符计数要用 char_length,别名 character_length,目前只支持 UTF-8。官方文档
Doris需改写CHAR_LENGTH(str)LENGTH 返回 UTF-8 编码下的字节数,别名 OCTET_LENGTH。按字符计数要用 CHAR_LENGTH,别名 CHARACTER_LENGTH。官方文档
Hive支持length(string A)返回字符串长度。Hive 2.2.0 起还有 character_length(简写 char_length)返回 UTF-8 字符数,octet_length 返回字节数。官方文档
Spark SQL支持length(expr)返回字符数,包含末尾的空格;对二进制数据返回字节数。字节数用 octet_length。官方文档
Flink SQL别名CHAR_LENGTH(string)返回字符数,别名 CHARACTER_LENGTH。内置函数中没有 LENGTH。官方文档

迁移注意事项

示例

找出名称超过 10 个字符的商品

MaxCompute
SELECT item_name FROM items WHERE LENGTH(item_name) > 10;
Hologres
SELECT item_name FROM items WHERE LENGTH(item_name) > 10;
StarRocks
SELECT item_name FROM items WHERE char_length(item_name) > 10;
Doris
SELECT item_name FROM items WHERE CHAR_LENGTH(item_name) > 10;
Hive
SELECT item_name FROM items WHERE length(item_name) > 10;
Spark SQL
SELECT item_name FROM items WHERE length(item_name) > 10;
Flink SQL
SELECT item_name FROM items WHERE CHAR_LENGTH(item_name) > 10;

同类函数

最后核对日期: