CHAR_LENGTH 函数(也称为 CHARACTER_LENGTH 函数)返回带引号字符串、具有字符数据类型的列、主变量或过程变量中的字符数。但是,该函数的实际行为因用户指定的自变量的类型而异。
下表说明 CHAR_LENGTH 函数如何对每种自变量类型进行操作。此表中的示例列使用符号 s 来表示单字节结尾空格。为简单起见,示例列假定字符串由单字节字符组成。
CHAR_LENGTH 自变量 | 行为 | 示例 |
---|---|---|
带引号字符串 | 返回字符串中的字符数,包括所有结尾空格字符(如在语言环境中所定义的)。 | 如果字符串为 'Ludwig',结果为 6。如果字符串为 'Ludwigssss',结果为 10。 |
CHAR 或 NCHAR 列 | 返回字符串中的字符数,包括结尾空格字符。此值是列的定义长度,以字节为单位。 | 如果 customer 表的 fname 列是 CHAR(15) 列,并且该列包含字符串 'Ludwig',那么结果为 15。如果 fname 列包含字符串 'Ludwigssss',那么结果为 15。 |
VARCHAR 或 NVARCHAR 列 | 返回字符串中的字符数,包括空格字符。值是字符串的实际长度(以字节为单位),而不是声明的最大列大小。 | 如果 catalog 表的 cat_advert 列为 VARCHAR(255, 65),并且该列包含字符串 "Ludwig",那么结果为 6。如果该列包含字符串 'Ludwigssss',那么结果为 10。 |
TEXT 列 | 返回列中的字符数,包括结尾空格字符。 | 如果 catalog 表中的 cat_descr 列是 TEXT 列,并且此列包含字符串 'Ludwig',那么结果为 6。如果 cat_descr 列包含字符串'Ludwigssss',那么结果为 10。 |
主机或过程变量 | 返回变量包含的字符数,包括所有结尾空格字符,不论变量的声明长度如何。 | 如果将过程变量 f_name 定义为 CHAR(15),并且此变量包含字符串 'Ludwig',那么结果为 6。如果 f_name 变量包含字符串 'Ludwigssss',那么结果为 10。 |
CHAR_LENGTH 函数在使用多字节代码集时特别有用。如果带引号字符串包含任何多字节字符,那么字符串中的字符数与字符串中的字节数不同。您可以使用 CHAR_LENGTH 函数来确定带引号字符串中的字符数。
但是,CHAR_LENGTH 函数在单字节代码集中也有用。在这些代码集中,列中的字节数等于列中的字符数。如果使用 LENGTH 函数来确定列中的字节数(在此情况下等于字符数),LENGTH 修剪列值并返回修剪的字符串的长度。相反,CHAR_LENGTH 不会修剪列值,但是返回列的声明大小。
CHAR_LENGTH 输入字符串 | 描述 | 结果 |
---|---|---|
'abc ' | 具有 4 个单字节字符的带引号字符串(字符 abc 和 1 个结尾空格) | 4 |
'A1A2B1B2' | 具有 2 个多字节字符的带引号字符串 | 2 |
'aA1A2B1B2' | 具有 2 个单字节和 2 个多字节字符的带引号字符串 | 4 |