第八十七章 SQL函数 $LISTSAME
第八十七章 SQL函数 $LISTSAME
比较两个列表并返回布尔值的列表函数。
大纲
$LISTSAME(list1,list2)
参数
list1
- 计算结果为有效列表的表达式。list2
- 计算结果为有效列表的表达式。
描述
$LISTSAME
比较两个列表的内容,如果列表相同则返回 1
。如果列表不相同,则 $LISTSAME
返回 0
。$LISTSAME
逐个元素地比较两个列表。对于两个相同的列表,它们必须包含相同数量的元素,并且 list1
中的每个元素必须与 list2
中的相应元素匹配。
$LISTSAME
使用它们的字符串表示来比较列表元素。 $LISTSAME
比较区分大小写。 $LISTSAME
按从左到右的顺序逐个元素地比较两个列表。因此,$LISTSAME
在遇到第一个不匹配的列表元素对时返回值 0
;它不检查后续项目以确定它们是否是有效的列表元素。
此函数返回 SMALLINT
类型的数据。
参数
list (list1 and list2)
列表是包含一个或多个元素的编码字符串。可以使用 SQL $LISTBUILD
函数或 ObjectScript $LISTBUILD
函数创建列表。可以使用 SQL $LISTFROMSTRING
函数或 ObjectScript $LISTFROMSTRING
函数将分隔字符串转换为列表。可以使用 SQL $LIST
函数或 ObjectScript $LIST
函数从现有列表中提取列表。
以下是有效列表的示例:
$LISTBUILD('a','b','c')
:一个三元素列表。$LISTBUILD('a','','c')
:三元素列表,第二个元素为空字符串值。$LISTBUILD('a',,'c')
或$LISTBUILD('a',NULL,'c')
:三元素列表,第二个元素没有值。$LISTBUILD(NULL,NULL)
或$LISTBUILD(,NULL)
:包含两个元素的列表,其中的元素没有值。$LISTBUILD(NULL)
或$LISTBUILD()
:单元素列表,该元素没有值。
如果列表参数为 NULL
,则 $LISTSAME
返回 NULL
。如果列表参数不是有效列表(并且不是 NULL
) SQL 会生成 SQLCODE -400
致命错误。
示例
以下嵌入式 SQL 示例使用 $LISTSAME
比较两个列表参数:
/// d ##class(PHA.TEST.SQLFunction).ListSame()
ClassMethod ListSame()
{
s a = $lb("Red", , "Yellow", "Green", "", "Violet")
s b = $lb("Red", , "Yellow", "Green", "", "Violet")
&sql(
SELECT $LISTSAME(:a,:b)
INTO :c
)
if SQLCODE '= 0 {
w !,"Error code;",SQLCODE
} elseif c=1 {
w "lists a and b are the same",!
} else {
w "lists a and b are not the same",!
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListSame()
lists a and b are the same
以下 SQL 示例比较具有 NULL
、缺失或空字符串元素的列表:
SELECT $LISTSAME($LISTBUILD('Red',NULL,'Blue'),$LISTBUILD('Red',,'Blue')) AS NullAbsent,
$LISTSAME($LISTBUILD('Red',NULL,'Blue'),$LISTBUILD('Red','','Blue')) AS NullEmpty,
$LISTSAME($LISTBUILD('Red',,'Blue'),$LISTBUILD('Red','','Blue')) AS AbsentEmpty
0 0 0
$LISTSAME
比较与 ObjectScript 等号使用的等价测试不同。等号将两个列表作为编码字符串(逐个字符)进行比较; $LISTSAME
逐个元素地比较两个列表。在比较数字和数字字符串时很容易看出这种区别,如下例所示:
/// d ##class(PHA.TEST.SQLFunction).ListSame1()
ClassMethod ListSame1()
{
s a = $lb("365")
s b = $lb(365)
if a = b {
w "Equal sign: lists a and b are the same",!
} else {
w "Equal sign: lists a and b are not the same",!
}
&sql(
SELECT $LISTSAME(:a,:b)
INTO :c
)
if SQLCODE '= 0 {
w !,"Error code ",SQLCODE
} elseif c=1 {
w "$LISTSAME: lists a and b are the same",!
} else {
w "$LISTSAME: lists a and b are not the same",!
}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ListSame1()
Equal sign: lists a and b are not the same
$LISTSAME: lists a and b are the same
以下 SQL 示例比较了包含规范和非规范形式的数字和数字字符串的列表。比较数字列表元素和字符串列表元素时,字符串列表元素必须以规范形式表示数字;这是因为 IRIS 在执行比较之前总是将数字简化为规范形式。在以下示例中,$LISTSAME
比较字符串和数字。前三个 $LISTSAME
函数返回 1(相同);第四个 $LISTSAME
函数返回 0(不相同),因为字符串表示不是规范形式:
SELECT $LISTSAME($LISTBUILD('365'),$LISTBUILD(365)),
$LISTSAME($LISTBUILD('365'),$LISTBUILD(365.0)),
$LISTSAME($LISTBUILD('365.5'),$LISTBUILD(365.5)),
$LISTSAME($LISTBUILD('365.0'),$LISTBUILD(365.0))
1 1 1 0
相关文章
- 三万字把SQL数据库的所有命令,函数,运算符讲得明明白白讲解,内容实在丰富
- INF: How SQL Server Compares Strings with Trailing Spaces
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护Bypass之一些函数的错误使用
- SQL SUM() 函数
- SQL MAX() 函数
- 第157章 SQL函数 WEEK
- 第151章 SQL函数 %TRUNCATE
- 第119章 SQL函数 RIGHT
- 第八十五章 SQL函数 $LISTGET
- 第四十七章 SQL函数 DAYNAME
- 第四十六章 SQL函数 DAY
- 第七章 SQL聚合函数 LIST
- 画图解释 SQL join 语句
- MYSQL-SQL语句性能优化策略以及面试题
- PDO 学习与使用 ( 一 ) :PDO 对象、exec 方法、query 方法与防 SQL 注入
- 数据库编程-嵌入式sql
- SQL cast()函数
- sql中substr()函数用法详细
- 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介
- MySQL中间件之ProxySQL(8):SQL语句的重写规则
- sql server 小技巧(4) Sql server 排序时让空值排在最后
- Csharp run sql script create database
- SQL— CONCAT(字符串连接函数)
- SQL中的cast()函数
- SQL Server数据库监控 - 如何告警
- 【bat】sql server在多台服务器上执行SQL脚本
- sql server系统存储过程大全
- (2.17)Mysql之SQL基础——日期函数
- SQL Server查看库、表占用空间大小
- pl/sql developer安装配置
- SQL server 统计分组经计