LENGTH 函数返回字符数据中数据的字节数。
但是,LENGTH 函数的行为因用户定义的自变量的类型而异。自变量可以是带引号字符串、TEXT 数据类型之外的字符类型列、TEXT 列、主变量或 SPL 例程变量。
下表说明 LENGTH 函数如何对这些自变量类型的每一种进行操作。此表中的示例列使用符号 s 来表示单字节结尾空格字符。
此表假定所有自变量均由单字节字符组成。
LENGTH 自变量 | 行为 | 示例 |
---|---|---|
带引号字符串 | 返回字符串中减去所有结尾空格之后的字节数(如在语言环境中所定义的)。 | 如果字符串为 'Ludwig',那么结果为 6。如果字符串为 'Ludwigssss',结果仍然是 6。 |
CHAR、VARCHAR、 LVARCHAR、 NCHAR 或 NVARCHAR 列 | 返回列中减去所有结尾空格字符之后的字节数,不论列的定义长度如何。 | 如果 customer 表的 fname 列为 CHAR(15) 列,并且此列包含字符串 'Ludwig',那么结果为 6。如果 fname 列包含字符串 'Ludwigssss',结果仍然为 6。 |
TEXT 列 | 返回列中的字节数,包括结尾空格字符。 | 如果 catalog 表中的 cat_descr 列是 TEXT 列,并且此列包含字符串 'Ludwig',那么结果为 6。如果 cat_descr 列包含字符串'Ludwigssss',那么结果为 10。 |
主机或过程变量 | 返回减去所有结尾空格字符之后变量包含的字节数,不论变量的定义长度如何。 | 如果将过程变量 f_name 定义为 CHAR(15),并且此变量包含字符串 'Ludwig',那么结果为 6。如果 f_name 变量包含字符串 'Ludwigssss',结果仍然为 6。 |
SELECT lname AS cust_name, length (fname) AS length, customer_num AS cust_num FROM customer WHERE customer_num < 106
以下输出示例显示查询的结果。对于检索到的每一行,length 列均可能显示 lname (cust_name) 列中的字符数。但是,实际上 length 列显示 lname 列中的字节数。
cust_name | length | cust_num |
---|---|---|
Ludwig | 6 | 101 |
Carole | 6 | 102 |
Philip | 6 | 103 |
Anthony | 7 | 104 |
Raymond | 7 | 105 |
在支持多字节代码集(如日语 SJIS 代码集)的语言环境中使用 LENGTH 函数时,字符和字节之间的区别很重要。LENGTH 返回其自变量中的字节数。此结果可能与字符数不同。
SELECT lname AS cust_name, length (fname) AS length, customer_num AS cust_num FROM customer_multi WHERE customer_num = 199
aA1A2bB1B2
在此表示法中,第一个字符(符号 a)是一个单字节字符。第二个字符(符号 A1A2)是一个双字节字符。第三个字符(符号 b)是一个单字节字符。第四个字符(符号 B1B2)是一个双字节字符。
cust_name | length | cust_num |
---|---|---|
aA1A2bB1B2 | 6 | 199 |