第七十七章 SQL函数 LENGTH
第七十七章 SQL函数 LENGTH
返回字符串表达式中字符数的字符串函数。
大纲
LENGTH(string-expression)
{fn LENGTH(string-expression)}
参数
string-expression- 字符串表达式,可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如CHAR或VARCHAR)。
LENGTH 返回 INTEGER 数据类型。
描述
LENGTH 返回一个整数,表示给定字符串表达式的字符数,而不是字节数。字符串表达式可以是字符串(从中删除尾随空格)或数字( IRIS 将其转换为规范形式)。
请注意,LENGTH 可用作 ODBC 标量函数(使用花括号语法)或 SQL 通用函数。
LENGTH 和其他长度函数($LENGTH、CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH)都执行以下操作:
LENGTH返回字段的逻辑(内部数据存储)值的长度,而不是显示值,无论SelectMode设置如何。所有 SQL 函数始终使用字段的内部存储值。LENGTH返回数字的规范形式的长度。规范形式的数字不包括前导零和尾随零、前导符号(单个减号除外)和尾随小数分隔符。LENGTH返回数字字符串的字符串长度。数字字符串不会转换为规范形式。LENGTH不排除字符串中的前导空格。可以使用LTRIM函数从字符串中删除前导空格。
在执行以下操作时,LENGTH 与其他长度函数($LENGTH、CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH)不同:
- LENGTH 不包括尾随空格和字符串终止字符。
$LENGTH、CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH 不排除尾随空格和终止符。
- 如果传递一个
NULL值,LENGTH返回NULL,如果传递一个空字符串,则返回0。
如果传递 NULL 值,CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH 也返回 NULL,如果传递空字符串,则返回 0。如果传递一个 NULL 值,则 $LENGTH 返回 0,如果传递一个空字符串,则返回 0。
LENGTH不支持数据流字段。为字符串表达式指定流字段会导致SQLCODE -37。
$LENGTH 也不支持流字段。 CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH 函数确实支持数据流字段。
示例
在以下示例中, IRIS 首先将每个数字转换为规范形式(删除前导零和尾随零,解析前导符号,并删除尾随小数分隔符)。每个 LENGTH 返回长度为 1:
SELECT {fn LENGTH(7.00)} AS CharCount,
{fn LENGTH(+007)} AS CharCount,
{fn LENGTH(007.)} AS CharCount,
{fn LENGTH(00000.00)} AS CharCount,
{fn LENGTH(-0)} AS CharCount
1 1 1 1 1
在以下示例中,第一个 LENGTH 删除前导零,返回长度值 2;第二个 LENGTH 将数值视为字符串,并且不删除前导零,返回长度值 3:
SELECT LENGTH(0.7) AS CharCount,
LENGTH('0.7') AS CharCount
2 3
以下示例返回值 12:
SELECT LENGTH('INTERSYSTEMS') AS CharCount
12
以下示例显示了 LENGTH 如何处理前导和尾随空格。第一个 LENGTH返回 15,因为 LENGTH 不包括尾随空格,但不包括前导空格。第二个 LENGTH 返回 12,因为 LTRIM 排除了前导空格:
SELECT LENGTH(' INTERSYSTEMS ') AS CharCount,
LENGTH(LTRIM(' INTERSYSTEMS ')) AS CharCount
15 12
以下示例返回 Sample.Person 表中每个 Name 值中的字符数:
SELECT Name,{fn LENGTH(Name)} AS CharCount
FROM Sample.Person
ORDER BY CharCount
以下示例返回 DOB(出生日期)字段中的字符数。请注意,返回的长度(由 LENGTH、CHAR_LENGTH 和 CHARACTER_LENGTH)是日期的内部 ($HOROLOG) 格式,而不是显示格式。 DOB的显示长度为十个字符;所有三个长度函数都返回 5 的内部长度:
SELECT DOB,{fn LENGTH(DOB)} AS LenCount,
CHAR_LENGTH(DOB) AS CCount,
CHARACTER_LENGTH(DOB) AS CtrCount
FROM Sample.Person
以下嵌入式 SQL 示例给出了 Unicode 字符字符串的长度。返回的长度是字符数 (7),而不是字节数。
/// d ##class(PHA.TEST.SQLCommand).Length()
ClassMethod Length()
{
s a = $CHAR(920,913,923,913,931,931,913)
&sql(SELECT LENGTH(:a) INTO :b )
if SQLCODE'=0 {
w !,"Error code ",SQLCODE
} else {
w !,"The Greek Sea: ",a,!,$LENGTH(a),!,b
}
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Length()
The Greek Sea: ΘΑΛΑΣΣΑ
7
7