0
点赞
收藏
分享

微信扫一扫

第七十八章 SQL函数 $LENGTH



文章目录

  • ​​第七十八章 SQL函数 $LENGTH​​
  • ​​大纲​​
  • ​​参数​​
  • ​​描述​​
  • ​​$LENGTH(expression) 和其他长度函数​​
  • ​​NULL 和空字符串参数​​
  • ​​示例​​
  • ​​注意​​
  • ​​LENGTH、PIECE 和 $LIST​​


第七十八章 SQL函数 $LENGTH

返回字符串中字符数或分隔子字符串数的字符串函数。

大纲

$LENGTH(expression[,delimiter])

参数

  • ​expression​​ - 目标字符串。它可以是数值、字符串文字、任何变量的名称或任何有效的表达式。
  • ​delimiter​​ - 可选 — 在目标字符串中划分不同子字符串的字符串。它必须是字符串文字,但可以是任意长度。括起来的引号是必需的。

​$LENGTH​​​ 返回 ​​SMALLINT​​ 数据类型。

描述

​$LENGTH​​ 返回指定字符串中的字符数或指定字符串中的子字符串数,具体取决于使用的参数。

  • ​$LENGTH(expression)​​​ 返回字符串中的字符数。如果表达式为空字符串 (​​''​​​),则​​$LENGTH​​​ 返回​​0​​​。如果表达式为​​NULL​​​,则​​$LENGTH​​​ 返回​​0​​。
  • ​$LENGTH(expression,delimiter)​​​ 返回字符串中子字符串的数量。​​$LENGTH​​ 返回由指定分隔符相互分隔的子字符串的数量。此数字始终等于在表达式字符串中找到的分隔符实例的数量加一。

$LENGTH(expression) 和其他长度函数

​$LENGTH(expression)​​​ 和其他长度函数(​​LENGTH​​​、​​CHARACTER_LENGTH​​​、​​CHAR_LENGTH​​​ 和 ​​DATALENGTH​​)都执行以下操作:

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

在执行以下操作时,​​$LENGTH​​​ 与其他长度函数(​​LENGTH​​​、​​CHARACTER_LENGTH​​​、​​CHAR_LENGTH​​​ 和 ​​DATALENGTH​​)不同:

  • ​$LENGTH​​​ 不排除尾随空格和终止符。​​CHARACTER_LENGTH​​​、​​CHAR_LENGTH​​​ 和​​DATALENGTH​​​ 也不排除尾随空格和终止符。​​LENGTH​​ 不包括尾随空格和字符串终止字符。
  • 如果传递一个​​NULL​​​ 值,则​​$LENGTH​​​ 返回​​0​​​,如果传递一个空字符串,则返回​​0​​​。如果传递​​NULL​​​值,则​​LENGTH​​​、​​CHARACTER_LENGTH​​​、​​CHAR_LENGTH​​​ 和​​DATALENGTH​​​ 返回​​NULL​​​,如果传递空字符串,则返回​​0​​。
  • ​$LENGTH​​​ 不支持数据流字段。为字符串表达式指定流字段会导致​​SQLCODE -37​​​。​​LENGTH​​​ 也不支持流字段。​​CHARACTER_LENGTH​​​、​​CHAR_LENGTH​​​ 和​​DATALENGTH​​ 函数确实支持数据流字段。
  • ​$LENGTH​​​ 返回数据类型​​SMALLINT​​​。所有其他长度函数都返回数据类型​​INTEGER​​。

NULL 和空字符串参数

​$LENGTH(expression)​​​ 不区分空字符串 (​​''​​​) 和 ​​NULL​​​(缺少值)。它为空字符串 (​​''​​​) 值和 ​​NULL​​​ 返回长度 ​​0​​。

如果没有匹配,带有非空分隔符的 ​​$LENGTH(expression,delimiter)​​​ 将返回 ​​1​​​ 的分隔子字符串计数。完整字符串是不包含分隔符的单个子字符串。即使表达式为空字符串 (​​''​​​) 或表达式为 ​​NULL​​​,也是如此。但是,空字符串会匹配自身,返回值 ​​2​​。

下表显示了字符串(​​‘abc’​​​)、空字符串(​​‘’​​​)或​​NULL​​​表达式值与不匹配的字符串(​​‘^’​​​)、空字符串(​​‘’​​​)或​​NULL​​分隔符值的可能组合:




​$LENGTH(NULL) = 0​

​$LENGTH('') = 0​

​$LENGTH('abc') = 3​

​$LENGTH(NULL,NULL) = 0​

​$LENGTH('',NULL) = 0​

​$LENGTH(’abc‘,NULL) = 0​

​$LENGTH(NULL,'') = 1​

​$LENGTH('','') = 2​

​$LENGTH(’abc‘,'') = 1​

​$LENGTH(NULL,'^') = 1​

​$LENGTH(’‘,'^') = 1​

​$LENGTH('abc','^') = 1​

示例

以下示例返回 ​​6​​,即字符串的长度:

SELECT $LENGTH('ABCDEG') AS StringLength

6

以下示例返回 ​​3​​​,即字符串中的子字符串数,由美元符号 (​​$​​) 字符分隔。

SELECT $LENGTH('ABC$DEF$EFG','$') AS SubStrings

3

如果在字符串 ​​$LENGTH​​​ 中找不到指定的分隔符,则返回 ​​1​​,因为唯一的子字符串是字符串本身:

SELECT $LENGTH('ABCDEG','$') AS SubStrings

1

在下面的嵌入式 SQL 示例中,第一个 ​​$LENGTH​​​ 函数返回 ​​11​​​,即 ​​a​​​中的字符数(当然包括空格字符)。第二个 ​​$LENGTH​​​ 函数返回 ​​2​​​,即 ​​a​​​ 中使用 ​​b​​(空格字符)作为子字符串分隔符的子字符串数。

/// d ##class(PHA.TEST.SQLCommand).Length1()
ClassMethod Length1()
{
s a = "HELLO WORLD"
s b = " "
&sql(
SELECT
$LENGTH(:a),
$LENGTH(:a,:b)
INTO :a1,:a2
)
if SQLCODE '= 0 {
w !,"Error code ",SQLCODE
} else {
w !,"The input string: ",a
w !,"Number of characters: ",a1
w !,"Number of substrings: ",a2 }
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).Length1()

The input string: HELLO WORLD
Number of characters: 11
Number of substrings: 2

以下示例返回 ​​0​​,因为测试的字符串是空字符串:

SELECT $LENGTH(NULL) AS StringLength

0

以下示例返回 ​​1​​,因为指定了分隔符但未找到。有一个子字符串,即空字符串:

SELECT $LENGTH(NULL,'$') AS SubStrings

1

以下示例返回 ​​0​​,因为分隔符是空字符串:

SELECT $LENGTH('ABCDEFG',NULL) AS SubStrings

0

注意LENGTH、PIECE 和 $LIST

  • 带有一个参数的​​$LENGTH​​​ 返回字符串中的字符数。此函数可与​​$EXTRACT​​ 函数一起使用,该函数按位置定位子字符串并返回子字符串值。
  • 带有两个参数的​​$LENGTH​​​ 根据分隔符返回字符串中子字符串的数量。此函数可与​​$PIECE​​ 函数一起使用,该函数通过分隔符定位子字符串并返回子字符串值。
  • ​$LENGTH​​​ 不应用于使用​​$LISTBUILD​​​ 或​​$LIST​​​ 创建的编码列表。使用​​$LISTLENGTH​​ 确定编码列表字符串中的子字符串(列表元素)的数量。

​$LENGTH​​​、​​$FIND​​​、​​$EXTRACT​​​ 和 ​​$PIECE​​​ 函数对标准字符串进行操作。各种 ​​$LIST​​​ 函数对与标准字符串不兼容的编码字符串进行操作。唯一的例外是 ​​$LISTGET​​​ 函数和 ​​$LIST​​ 的单参数和双参数形式,它们将编码字符串作为输入,但将单个元素值作为标准字符串输出。



举报

相关推荐

0 条评论