文章
姚 鑫 · 三月 10 阅读大约需 4 分钟

第七十七章 SQL函数 LENGTH

第七十七章 SQL函数 LENGTH

返回字符串表达式中字符数的字符串函数。

大纲

LENGTH(string-expression)

{fn LENGTH(string-expression)}

参数

  • string-expression - 字符串表达式,可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。

LENGTH 返回 INTEGER 数据类型。

描述

LENGTH 返回一个整数,表示给定字符串表达式的字符数,而不是字节数。字符串表达式可以是字符串(从中删除尾随空格)或数字( IRIS 将其转换为规范形式)。

请注意,LENGTH 可用作 ODBC 标量函数(使用花括号语法)或 SQL 通用函数。

LENGTH 和其他长度函数($LENGTHCHARACTER_LENGTHCHAR_LENGTHDATALENGTH)都执行以下操作:

  • LENGTH 返回字段的逻辑(内部数据存储)值的长度,而不是显示值,无论 SelectMode 设置如何。所有 SQL 函数始终使用字段的内部存储值。
  • LENGTH 返回数字的规范形式的长度。规范形式的数字不包括前导零和尾随零、前导符号(单个减号除外)和尾随小数分隔符。 LENGTH 返回数字字符串的字符串长度。数字字符串不会转换为规范形式。
  • LENGTH 不排除字符串中的前导空格。可以使用 LTRIM 函数从字符串中删除前导空格。

在执行以下操作时,LENGTH 与其他长度函数($LENGTHCHARACTER_LENGTHCHAR_LENGTHDATALENGTH)不同:
- LENGTH 不包括尾随空格和字符串终止字符。

$LENGTHCHARACTER_LENGTHCHAR_LENGTHDATALENGTH 不排除尾随空格和终止符。

  • 如果传递一个 NULL 值,LENGTH 返回 NULL,如果传递一个空字符串,则返回 0

如果传递 NULL 值,CHARACTER_LENGTHCHAR_LENGTHDATALENGTH 也返回 NULL,如果传递空字符串,则返回 0。如果传递一个 NULL 值,则 $LENGTH 返回 0,如果传递一个空字符串,则返回 0

  • LENGTH 不支持数据流字段。为字符串表达式指定流字段会导致 SQLCODE -37

$LENGTH 也不支持流字段。 CHARACTER_LENGTHCHAR_LENGTHDATALENGTH 函数确实支持数据流字段。

示例

在以下示例中, 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(出生日期)字段中的字符数。请注意,返回的长度(由 LENGTHCHAR_LENGTHCHARACTER_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
0
0 11
讨论 (0)1
登录或注册以继续