前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL函数 $LENGTH

SQL函数 $LENGTH

作者头像
用户7741497
发布2022-03-25 09:58:27
1.8K0
发布2022-03-25 09:58:27
举报
文章被收录于专栏:hml_知识记录

大纲

代码语言:javascript
复制
$LENGTH(expression[,delimiter])

参数

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

$LENGTH 返回 SMALLINT 数据类型。

描述

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

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

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

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

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

在执行以下操作时,$LENGTH 与其他长度函数(LENGTHCHARACTER_LENGTHCHAR_LENGTHDATALENGTH)不同:

  • $LENGTH 不排除尾随空格和终止符。CHARACTER_LENGTHCHAR_LENGTHDATALENGTH 也不排除尾随空格和终止符。 LENGTH 不包括尾随空格和字符串终止字符。
  • 如果传递一个 NULL 值,则 $LENGTH 返回 0,如果传递一个空字符串,则返回 0。如果传递 NULL值,则 LENGTHCHARACTER_LENGTHCHAR_LENGTHDATALENGTH 返回 NULL,如果传递空字符串,则返回 0
  • $LENGTH 不支持数据流字段。为字符串表达式指定流字段会导致 SQLCODE -37LENGTH 也不支持流字段。 CHARACTER_LENGTHCHAR_LENGTHDATALENGTH 函数确实支持数据流字段。
  • $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,即字符串的长度:

代码语言:javascript
复制
SELECT $LENGTH('ABCDEG') AS StringLength

6

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

代码语言:javascript
复制
SELECT $LENGTH('ABC$DEF$EFG','$') AS SubStrings

3

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

代码语言:javascript
复制
SELECT $LENGTH('ABCDEG','$') AS SubStrings

1

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

代码语言:javascript
复制
/// 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 }
}
代码语言:javascript
复制
DHC-APP>d ##class(PHA.TEST.SQLCommand).Length1()
 
The input string: HELLO WORLD
Number of characters: 11
Number of substrings: 2

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

代码语言:javascript
复制
SELECT $LENGTH(NULL) AS StringLength

0

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

代码语言:javascript
复制
SELECT $LENGTH(NULL,'$') AS SubStrings

1

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

代码语言:javascript
复制
SELECT $LENGTH('ABCDEFG',NULL) AS SubStrings

0

PIECE 和 $LIST

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

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

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大纲
  • 参数
  • 描述
    • $LENGTH(expression) 和其他长度函数
    • NULL 和空字符串参数
    • 示例
    • PIECE 和 $LIST
    相关产品与服务
    数据保险箱
    数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档