LENGTH 函数

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。
当使用缺省语言环境或具有单字节代码集的任何语言环境时,LENGTH 函数可能会返回列中的字符数。在以下示例中,stores_demo 数据库(包含 customer 表)使用美国英语语言环境的缺省代码集。假定用户输入带有 LENGTH 函数的 SELECT 语句以显示客户编号小于 106 的行的姓、姓的长度和客户编号。
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 返回其自变量中的字节数。此结果可能与字符数不同。

下一个示例假定包含 customer_multi 表的数据库具有使用多字节代码集的语言环境。假定用户输入带有 LENGTH 函数的 SELECT 语句来显示编号为 199 的客户的 lname 及其长度和 customer_num
SELECT lname AS cust_name, 
      length (fname) AS length, customer_num AS cust_num
      FROM customer_multi WHERE customer_num = 199
假定客户 199 的 lname 由四个字符组成:
aA1A2bB1B2

在此表示法中,第一个字符(符号 a)是一个单字节字符。第二个字符(符号 A1A2)是一个双字节字符。第三个字符(符号 b)是一个单字节字符。第四个字符(符号 B1B2)是一个双字节字符。

以下输出示例显示查询的结果。虽然客户的名字由 4 个字符组成,但是 length 列显示该名字的字节总数为 6。
cust_name length cust_num
aA1A2bB1B2 6 199