1 关注者 · 990 帖子

  

InterSystems Caché 是一个多模型 DBMS 和应用服务器。

查看此处提供的更多详细信息

文档

文章 姚 鑫 · 一月 4, 2022 6m read

第十四章 SQL窗口函数概述(一)

指定用于计算聚合和排名的每行“窗口框架”的函数。

窗口函数和聚合函数

在应用WHEREGROUP byHAVING子句之后,窗口函数对查询选择的行进行操作。

窗口函数将一组行中的一个(或多个)字段的值组合在一起,并在结果集中为生成的列中的每一行返回一个值。

虽然窗口函数与聚合函数类似,因为它们将多行结果组合在一起,但它们与聚合函数的不同之处在于,它们本身并不组合行。

窗函数的语法

窗口函数被指定为查询中的选择项。 窗口函数也可以在查询的子句中指定。

窗口函数执行与由子句、子句和ROWS子句指定的逐行窗口相关的任务,并为每一行返回一个值。 这三个子句都是可选的,但是如果指定了,必须按照以下语法中的顺序指定:

window-function() OVER (
                      [ PARTITION BY partfield ]
                      [ ORDER BY orderfield ]
                      [ ROWS framestart ] | [ ROWS BETWEEN framestart AND frameend ]
                      )
0
0 1563
文章 姚 鑫 · 一月 3, 2022 4m read

第十三章 SQL聚合函数 XMLAGG

一个聚合函数,它创建一个串接的值字符串。

大纲

XMLAGG([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定XMLAGG返回string-expr的所有值的连接字符串。 如果没有指定关键字,这是默认值。
  • - 可选-一个子句,指定XMLAGG返回一个只包含唯一值的连接字符串。 可以指定子句,其中可以是单个字段,也可以是用逗号分隔的字段列表。
  • - 计算结果为字符串的SQL表达式。 通常,这是要从其中检索数据的列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

描述

聚合函数返回由中的所有值组成的串接字符串。 返回值的数据类型为,默认长度为。

  • 一个简单的(或)返回一个字符串,该字符串包含一个由所选行中的所有值组成的连接字符串。 为的行将被忽略。

以下两个示例都返回相同的单个值,即表的Home_State列中列出的所有值的串联字符串。

SELECT XMLAGG(ALL Home_State) AS ALL_State_Values
FROM Sample.Person

请注意,此连接字符串包含重复值。

0
0 318
文章 姚 鑫 · 一月 3, 2022 4m read

第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP

返回数据集统计方差的聚合函数。

大纲

VARIANCE([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

VAR_SAMP([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

VAR_POP([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定统计方差函数返回表达式中所有值的方差。 如果没有指定关键字,这是默认值。
  • DISTINCT - 可选- DISTINCT子句,指定统计方差函数返回不同(唯一)表达式值的方差。 DISTINCT可以指定子句,其中可以是单个字段,也可以是用逗号分隔的字段列表。
  • - 任何有效的表达式。 通常是包含要分析方差的数据值的列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

这些函数返回

0
0 386
文章 姚 鑫 · 十二月 31, 2021 4m read

第十一章 SQL聚合函数 SUM

返回指定列值之和的聚合函数。

大纲

SUM([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定SUM返回表达式中所有值的和。 如果没有指定关键字,这是默认值。
  • DISTINCT - 可选-一子句,指定SUM返回表达式中不同(唯一)值的和。 可以指定子句,其中可以是单个字段,也可以是用逗号分隔的字段列表。
  • - 任何有效的表达式。 通常是包含要求和的数据值的列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

返回与相同的数据类型,但有如下异常:、和返回的数据类型都是。

注意:可以指定为聚合函数,也可以指定为窗口函数。 本参考页面描述了作为聚合函数的使用。 SUM作为一个窗口函数在窗口函数概述中描述。

描述

聚合函数返回表达式值的和。 通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。

可以在引用表或视图的SELECT查询或子查询中使用。 可以在列表或子句中与普通字段值一起出现。

不能在子句中使用。 不能在的子句中使用,除非是子查询。

和所有聚合函数一样,可以接受一个可选的子句。 SUM(DISTINCT col1)

0
0 69
文章 姚 鑫 · 十二月 30, 2021 3m read

第十章 SQL聚合函数 STDDEV, STDDEV_SAMP, STDDEV_POP

返回数据集的统计标准差的聚合函数。

大纲

STDDEV([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

STDDEV_SAMP([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

STDDEV_POP([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定标准偏差函数返回表达式的所有值的标准偏差。如果未指定关键字,则这是默认值。
  • DISTINCT - 可选-指定标准偏差函数返回不同(唯一)表达式值的标准偏差的DISTINCT子句。DISTINCT可以指定子句,其中可以是单个字段,也可以是逗号分隔的字段列表。
  • - 任何有效的表达式。通常是包含要分析标准偏差的数据值的列的名称。
  • - 可选-列名或逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用HAVING子句中的条件。

除非表达式的数据类型为

0
0 352
文章 姚 鑫 · 十二月 29, 2021 3m read

[toc]

第九章 SQL聚合函数 MIN

返回指定列中的最小数据值的聚合函数。

大纲

MIN([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-将聚合函数应用于所有值。ALLMIN返回的值没有影响。提供它是为了与兼容。
  • - 可选-指定考虑每个唯一值。对MIN返回的值没有影响。它是为兼容性提供的。
  • - 任何有效的表达式。通常是包含要从中返回最小值的值的列的名称。
  • - 可选-列名或逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用HAVING子句中的条件。

返回与表达式相同的数据类型。

描述

聚合函数返回表达式的最小值(最小值)。通常,表达式是查询返回的多行中的字段名称(或包含一个或多个字段名称的表达式)。

可以在引用表或视图的SELECT查询或子查询中使用。MIN可以出现在选择列表或子句中,与普通字段值一起出现。

不能在子句中使用。除非是子查询,否则不能在联接的子句中使用。

与大多数其他聚合函数一样,不能应用于流字段。尝试这样做会生成错误。

与大多数其他聚合函数不同,ALL和关键字(包括在MIN中不执行任何操作。它们是为了与SQL-92兼容而提供的。

数据值

使用的指定字段可以是数字或非数字。对于数字数据类型字段,最小值定义为数值中的最低值;因此

0
0 304
文章 姚 鑫 · 十二月 28, 2021 3m read

第八章 SQL聚合函数 MAX

返回指定列中最大数据值的聚合函数。

大纲

MAX([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-将聚合函数应用于所有值。 ALLMAX返回的值没有影响。 它提供了兼容性。
  • - 可选-一个子句,指定考虑每个惟一值。 DISTINCT对返回的值没有影响。 它提供了兼容性。
  • - 任何有效的表达式。 通常是包含要返回的最大值的值的列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

返回与表达式相同的数据类型。

描述

聚合函数返回表达式的最大值。 通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。

可以在引用表或视图的SELECT查询或子查询中使用。 MAX可以在列表或子句中与普通字段值一起出现。

不能在子句中使用。 不能在的子句中使用,除非是子查询。

与大多数其他聚合函数一样,不能应用于流字段。 尝试这样做会产生一个错误。

与大多数其他聚合函数不同,ALL和关键字,包括,在中不执行任何操作。 它们是为了的兼容性而提供的。

数据值

使用的指定字段可以是数字或非数字。 对于数字数据类型字段,

0
0 575
文章 姚 鑫 · 十二月 27, 2021 6m read

第七章 SQL聚合函数 LIST

创建逗号分隔值列表的聚合函数。

大纲

LIST([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定LIST返回string-expr的所有值的列表。 如果没有指定关键字,这是默认值。
  • - 可选-一个子句,指定LIST返回一个仅包含唯一的值的列表。 可以指定子句,其中可以是单个字段,也可以是用逗号分隔的字段列表。
  • - 计算结果为字符串的SQL表达式。 通常是所选表中列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

描述

聚合函数返回指定列中以逗号分隔的值列表。

一个简单的(或)返回一个字符串,其中包含一个逗号分隔的列表,该列表由所选行中string-expr的所有值组成。 其中为空字符串()的行由逗号分隔列表中的占位符逗号表示。 为的行不包含在逗号分隔的列表中。 如果只有一个值,并且是空字符串(),返回空字符串。

返回一个字符串,该字符串包含一个逗号分隔的列表,该列表由所选行中的所有不同(唯一)值组成:LIST(DISTINCT col1)。 不包含在逗号分隔的列表中。 返回一个逗号分隔的列表,其中只包含那些

0
0 233
文章 姚 鑫 · 十二月 26, 2021 6m read

第六章 SQL聚合函数 JSON_ARRAYAGG

创建JSON格式值数组的聚合函数。

注:IRIS可用,IRIS之前版本不可用。

大纲

JSON_ARRAYAGG([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定JSON_ARRAYAGG返回一个JSON数组,其中包含的所有值。 如果没有指定关键字,这是默认值。
  • - 可选-一个子句,指定JSON_ARRAYAGG返回一个仅包含唯一字符串值的数组。 可以指定子句,其中可以是单个字段,也可以是用逗号分隔的字段列表。
  • - 计算结果为字符串的SQL表达式。 通常是所选表中列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

描述

聚合函数返回指定列中值的JSON格式数组。

一个简单的(或)返回一个数组,其中包含所选行中的所有值。 字符串为空字符串的行由数组中的()表示。 字符串为NULL的行不包含在数组中。 如果只有一个字符串值,并且是空字符串(),将返回数组。 如果所有的值为, 返回一个空的数组。

返回一个数组,由所选行中string-expr的所有不同(唯一)值组成:。 字符串不包含在数组中。 返回一个数组,该数组只包含记录中

0
0 431
文章 姚 鑫 · 十二月 25, 2021 5m read

第五章 SQL聚合函数 %DLIST

创建值列表的聚合函数。

大纲

%DLIST([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定%DLIST返回string-expr的所有值的列表。如果未指定关键字,则这是默认值。
  • - 可选- 子句,指定%DLIST返回一个结构化的,其中只包含唯一的值。 可以指定子句,其中可以是单个字段,也可以是用逗号分隔的字段列表。
  • - 计算结果为字符串的SQL表达式。 通常是所选表中列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

描述

聚合函数返回一个ObjectScript 结构,其中包含指定列中的值作为列表元素。

一个简单的(或)返回列表,该列表由所选行中string-expr的所有非值组成。 为的行不会作为元素包含在列表结构中。

返回一个列表,由所选行中的所有不同(唯一)非null值组成:。 不作为元素包含在结构中。 返回一个元素的,其中只包含那些字段值在值不同(唯一)的记录中。 但是请注意,不同的值可能包含一个单独的NULL值。

%DLIST 和 %SelectMode

可以使用属性来指定

0
0 140
文章 姚 鑫 · 十二月 24, 2021 4m read

第四章 SQL聚合函数 COUNT(二)

权限

要使用COUNT(*),必须对指定的表具有表级别的SELECT权限。 要使用COUNT(column-name),必须对指定的列具有列级的权限,或者对指定的表具有表级的权限。 可以通过调用命令来确定当前用户是否具有权限。 可以通过调用方法来确定指定的用户是否具有表级权限。

性能

为了获得最优的性能,你应该按照以下方式定义索引:

  • 对于COUNT(*),如果需要,定义位图扩展索引。 这个索引可能是在创建表时自动定义的。
  • 对于COUNT(fieldname),为指定字段定义一个位片索引。 查询计划优化自动应用默认的排序规则到fieldname

未提交事务所做的更改

与所有聚合函数一样,COUNT总是返回数据的当前状态,包括未提交的更改,而不管当前事务的隔离级别如何,如下所示:

  • 插入和更新的记录的计数,即使这些更改尚未提交并可能回滚。
  • 不计算已删除的记录,即使这些删除还没有提交并且可以回滚。

示例

下面的示例返回中的总行数:

SELECT COUNT(*) AS TotalPersons
     FROM Sample.Person

下面的示例返回中的姓名、配偶和最喜欢的颜色的计数。这些计数不同,因为有些配偶和字段为;不计算:

SELECT COUNT(Name) AS People,
       COUNT(Spouse) AS PeopleWithSpouses,
       COUNT(FavoriteColors) AS PeopleWithColorPref
FROM Sample.Person
0
0 114
文章 姚 鑫 · 十二月 23, 2021 5m read

第三章 SQL聚合函数 COUNT(一)

返回表或指定列中的行数的聚合函数。

大纲

COUNT(*)

COUNT([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • * - 指定应计算所有行以返回指定表中的总行数。 COUNT(*)不接受其他参数,不能与ALL或关键字一起使用。 不接受表达式参数,也不使用任何特定列的信息。 返回指定表或视图中的行数,但不消除重复项。 它分别计数每一行,包括包含值的行。
  • - 可选-指定返回表达式中所有值的计数。 如果没有指定关键字,这是默认值。
  • DISTINCT - 可选-一个子句,指定COUNT返回表达式的不同(唯一)值的计数。 不能与流字段一起使用。 可以指定子句,其中可以是单个列名,也可以是用逗号分隔的列名列表。
  • - 任何有效的表达式。 通常是包含要计算的数据值的列的名称。
  • - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在子句中的条件。

返回数据类型。

描述

聚合函数有两种形式:

  • 以整数形式返回表达式中值的数目的计数。 通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。 不计算值。 它可以选择计数或不计数重复的字段值。 总是返回数据类型 长度为,精度为,刻度为。
0
0 668
文章 姚 鑫 · 十二月 22, 2021 6m read

第二章 SQL聚合函数 AVG

返回指定列值的平均值的聚合函数。

大纲

AVG([ALL | DISTINCT [BY(col-list)]] expression [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定AVG返回表达式所有值的平均值。 如果没有指定关键字,则为默认值。
  • DISTINCT - 可选 - 子句,指定AVG只计算一个值的唯一实例的平均值。 可以指定子句,其中可以是单个字段,也可以是逗号分隔的字段列表。
  • - 任何有效的表达式。 通常是包含要取平均值的数据值的列的名称。
  • - 可选—列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选 - 应用在HAVING子句中找到的条件。

返回或数据类型。 如果是类型,返回; 否则,它返回。

描述

聚合函数返回表达式值的平均值。 通常,表达式是查询返回的多行中字段的名称(或包含一个或多个字段名称的表达式)。

可以用于引用表或视图的SELECT查询或子查询。 AVG可以出现在列表或子句中,与普通字段值一起出现。

不能在子句中使用。 不能在的子句中使用,除非是子查询。

像所有聚合函数一样,可以带有一个可选的子句。 AVG(DISTINCT col1)仅对不同(唯一)的字段值进行平均。 仅对值不同(唯一)的记录中的字段值进行平均值。 但是请注意,不同的

0
0 508
文章 姚 鑫 · 十二月 21, 2021 7m read

第一章 聚合函数概述

计算列的所有值并返回单个聚合值的函数。

支持聚合函数

聚合函数执行与单个列中的一个或多个值相关的任务,并返回单个值。 支持的功能有:

  • SUM - 返回指定列的值的和。
  • AVG - 返回指定列值的平均值。
  • COUNT - 返回表中的行数,或指定列中非空值的个数。
  • MAX - 返回指定列中使用的最大值。
  • MIN - 返回指定列中使用的最小值。
  • VARIANCE,, - 返回指定列的值的统计方差。
  • , , - 返回指定列值的统计标准偏差。
  • - 以逗号分隔的列表形式返回指定列中使用的所有值。
  • - 返回指定列中使用的所有值,作为 IRIS列表结构中的元素。
  • - 将指定列中使用的所有值作为连接字符串返回。
  • - 返回指定列中使用的所有值作为JSON格式数组。

可以使用命令定义其他用户定义的聚合函数。

聚合函数忽略为的字段。 例如,LIST%DLIST不包含指定字段为的行的元素。 只计算指定字段的非空值。

聚合函数(除外)不能应用于流字段。 这样做会产生一个错误。 可以使用COUNT来计数流字段值,但有一些限制。

注意:聚合函数类似于窗口函数。 但是,聚合函数从一组行中获取列的值,并将结果作为单个值返回。 窗口函数从一组行中获取一列的值,并为每一行返回一个值。 聚合函数可以在窗口函数中指定。 不能在聚合函数中指定窗口函数。 既可以用作聚合函数,也可以用作窗口函数。

0
0 222
文章 姚 鑫 · 十二月 19, 2021 5m read

第二十章 SQL谓词 %STARTSWITH(二)

首尾空格

在大多数情况下,%STARTSWITH将前导空格视为与任何其他字符相同的字符。 例如,%STARTSWITH ' B'可用于选择只有一个前导空白后跟字母B的字段值。然而,只包含空白的子字符串不能选择前导空白; 它选择非空值。

尾随空格的行为取决于数据类型和排序规则类型。 忽略定义为SQLUPPER的字符串子串的尾随空格。 不会忽略数字、日期或列表子字符串中的尾随空格。

在下面的示例中,将结果集限制为以开头的名称。 因为Name是一个字符串数据类型,子字符串的末尾空格将被忽略:

SELECT Name FROM Sample.Person
WHERE Name %STARTSWITH 'M      '

在下面的示例中,从结果集中删除所有行,因为对于数值,子字符串的末尾空格不会被忽略:

SELECT Name,Age FROM Sample.Person
WHERE Age %STARTSWITH '6      '

在下面的示例中,从结果集中删除所有行,因为对于列表值,子字符串中的末尾空不会被忽略:

SELECT Name,FavoriteColors FROM Sample.Person
WHERE %EXTERNAL(FavoriteColors) %STARTSWITH 'Blue '
0
0 94
文章 姚 鑫 · 十二月 18, 2021 5m read

第十九章 SQL谓词 %STARTSWITH(一)

用指定初始字符的子字符串匹配值。

大纲

scalar-expression %STARTSWITH substring

参数

  • scalar-expression - 将其值与子字符串进行比较的标量表达式(最常见的是数据列)。
  • substring - 解析为包含与标量表达式中的值匹配的第一个或多个字符的字符串或数字的表达式。

描述

%STARTSWITH谓词允许选择以子字符串中指定的字符开头的数据值。 如果不匹配任何标量表达式值,返回空字符串。 无论显示模式如何,这个匹配总是在逻辑(内部存储)数据值上执行。

下面的示例选择所有以“M”开头的名称:

SELECT Name FROM Sample.MyTest WHERE Name %STARTSWITH 'M'

可以用来颠倒谓词的意思。 下面的示例选择除了以开头的名称以外的所有名称:

SELECT Name FROM Sample.MyTest WHERE NOT Name %STARTSWITH 'M'

排序类型

使用与它匹配的字段相同的排序规则类型。 默认情况下,字符串数据类型字段是用SQLUPPER排序规则定义的,它不区分大小写。

在下面的例子中,被定义为; 子字符串匹配不区分大小写:

SELECT UpName FROM Sample.MyTest WHERE UpName %STARTSWITH 'mo'
0
0 239
文章 姚 鑫 · 十二月 17, 2021 1m read

第十八章 SQL谓词 SOME

将值与子查询中的至少一个匹配值匹配。

大纲

scalar-expression comparison-operator SOME (subquery)

参数

  • scalar-expression - 将其值与子查询生成的结果集进行比较的标量表达式(最常见的是数据列)。
  • comparison-operator - 以下比较操作符之一:=(等于),<>或(不等于),(大于),(大于或等于),(包含),或(跟随)。
  • - 一个用括号括起来的子查询,它返回一个用于与标量表达式比较的结果集。

描述

关键字与比较操作符一起创建谓词(量化比较条件),如果标量表达式的值与子查询检索到的一个或多个对应值匹配,则该谓词为真。 谓词将单个标量表达式项与单个子查询项进行比较。 具有多个选择项的子查询将生成错误。

注意:和关键字是同义词。

示例

下面的例子选择了居住在密西西比河以西任何一个州的工资超过75,000美元的员工:

SELECT Name,Salary,Home_State FROM Sample.Employee
WHERE Salary > 75000
AND Home_State = SOME
 (SELECT State FROM Sample.USZipCode
  WHERE Longitude < -93)
ORDER BY Home_State
0
0 102
文章 姚 鑫 · 十二月 16, 2021 5m read

第十七章 SQL谓词 %PATTERN

用包含字面值、通配符和字符类型代码的模式字符串匹配值。

大纲

scalar-expression %PATTERN pattern

参数

  • scalar-expression - 一个标量表达式(最常见的是数据列),它的值正在与模式进行比较。
  • pattern - 一个带引号的字符串,表示要与标量表达式中的每个值匹配的字符模式。 模式字符串可以包含双引号括起来的文字字符、指定字符类型的字母代码以及数字和作为通配符的句点(.)字符。

描述

%PATTERN谓词允许将字符类型代码和字面值的模式匹配到由标量表达式提供的数据值。 如果模式匹配完整的标量表达式值,则返回该值。 如果没有完全匹配任何标量表达式值,将返回空字符串。

使用与ObjectScript模式匹配操作符相同的模式代码( 操作符)。 模式由一对或多对重复计数和一个值组成。 重复计数可以是整数,句点(.)表示“任意数量的字符”,或者使用句点和整数的组合指定的范围。 值可以是字符类型代码字母或字符串字面值(在引号中指定)。

请注意,一个模式通常由多个重复/值对组成,因为该模式必须与整个数据值完全匹配。因此,许多模式都以“.E”对结尾,这意味着数据值的其余部分可以由任意数量的任意类型的字符组成。

模式匹配对的几个简单示例:

  • 1L
0
0 175
文章 姚 鑫 · 十二月 15, 2021 5m read

第十六章 SQL谓词 %MATCHES

用包含字面值、通配符和范围的模式字符串匹配值。

大纲

scalar-expression %MATCHES pattern [ESCAPE char]

参数

  • scalar-expression - 一个标量表达式(最常见的是数据列),它的值正在与模式进行比较。
  • pattern - 一个带引号的字符串,表示要与标量表达式中的每个值匹配的字符模式。 模式字符串可以包含文字字符,问号(?)和星号(*)通配符,方括号用于指定允许的值,反斜杠()用于指定紧跟其后的字符被视为文字。 模式也可以是空字符串或,尽管它不匹配或返回项。
  • - 可选-包含单个字符的字符串。 这个字符字符可以在模式中用于指定紧跟在它后面的字符将被视为文字。 如果未指定,默认转义字符是反斜杠()。

描述

谓词是 IRIS扩展,用于将值匹配到模式字符串。 返回或用于匹配操作。 模式字符串可以由字面量字符、通配符字符和匹配字面量的列表或范围组成。

模式匹配区分大小写。 模式匹配基于标量表达式的值,而不是它的排序规则值。 因此,操作始终是大小写敏感的,即使标量表达式的排序规则类型不区分大小写。

%MATCHES支持以下模式通配符:

  • ? - 匹配任意类型的任意单个字符。
  • - 匹配零个或多个任意类型的字符。
  • [abc] - 匹配括号中指定的任意一个字符。
0
0 150
文章 姚 鑫 · 十二月 14, 2021 7m read

第十五章 SQL谓词 LIKE

用包含字面值和通配符的模式字符串匹配值。

大纲

scalar-expression LIKE pattern [ESCAPE char]

参数

  • scalar-expression - 一个标量表达式(最常见的是数据列),它的值正在与模式进行比较。
  • pattern - 一个带引号的字符串,表示要与标量表达式中的每个值匹配的字符模式。 模式字符串可以包含字面字符、下划线(_)和百分比(%)通配符。
  • 可选-包含单个字符的字符串。 这个字符字符可以在模式中用于指定紧跟在它后面的字符将被视为文字。

描述

谓词允许选择那些匹配模式中指定的字符的数据值。 模式可以包含通配符。 如果不匹配任何标量表达式值,返回空字符串。

可以在任何可以指定谓词条件的地方使用,如本手册的谓词概述页面所述。

谓词支持以下通配符:

  • - 任何单个字符
  • % - 由0个或多个字符组成的序列。 (根据SQL标准,NULL不被认为是一个0字符的序列,因此不被这个通配符选中。)

在动态SQL或嵌入式SQL中,模式可以将通配符和输入参数或输入主机变量表示为连接的字符串,如示例部分所示。

注意:当在运行时提供谓词值时(使用 输入参数或输入主机变量),结果谓词%STARTSWITH 'abc'

0
0 147
文章 姚 鑫 · 十二月 13, 2021 1m read

第十四章 SQL谓词 IS NULL

确定一个数据值是否为NULL

大纲

scalar-expression IS [NOT] NULL

描述

IS NULL谓词检测未定义的值。 可以检测到所有空值,或所有非空值:

SELECT Name, FavoriteColors FROM Sample.Person
WHERE FavoriteColors IS NULL 
SELECT Name, FavoriteColors FROM Sample.Person
WHERE FavoriteColors IS NOT NULL

IS NULL / 谓词是少数几个可以在子句中用于流字段的谓词之一。 如下面的例子所示:

不应将谓词与函数混淆。

0
0 100
文章 Johnny Wang · 十二月 12, 2021 3m read

    您可能已经听说,我们目前正在为所有正在使用 Caché 和 Ensemble 的客户提供限时免费迁移到我们的下一代数据平台 InterSystems IRIS 的机会。

    虽然我们依旧如往常一样全力支持那些正在使用 Caché 数据库和 Ensemble 集成引擎的客户,但我们还是认为 InterSystems IRIS 是未来的关键。它结合了 Caché 和 Ensemble 的所有功能,并添加了大量令人兴奋的强大功能,从机器学习到原生 Python。

    这也正是我们为现有客户提供迁移到 InterSystems IRIS 并使用这些新功能的原因。 我们也通过就地迁移支持轻松迁移,这意味着无需数据库转换、分步迁移指南、教程等。

    听起来挺有趣对吗? 以下是我针对当前 Caché 和 Ensemble 应迁移到 InterSystems IRIS 的五个主要原因。

0
0 376
文章 姚 鑫 · 十二月 12, 2021 3m read

第十三章 SQL谓词 IS JSON

确定数据值是否为JSON格式。

注意:IRIS版本可用。其他不行。

大纲

scalar-expression IS [NOT] JSON [keyword]

参数

  • scalar-expression - 正在检查JSON格式的标量表达式。
  • keyword - 可选—可选值、标量、数组或对象。 默认为。

描述

IS JSON谓词确定数据值是否为格式。 下面的示例确定谓词是否是格式化正确的字符串,是对象还是数组:

ClassMethod IsJson()
{
	s q1 = "SELECT TOP 5 Name FROM Sample.Person "
	s q2 = "WHERE '{""name"":""Fred"",""spouse"":""Wilma""}' IS JSON"
	s myquery = q1_q2
	s tStatement = ##class(%SQL.Statement).%New()
	s qStatus = tStatement.%Prepare(myquery)
	if qStatus'=1 {
		w "%Prepare failed:" 
		d $System.Status.DisplayError(qStatus) 
		q
	}
	s rset = tStatement.%Execute()
	d rset.%Display()
}
0
0 128
文章 姚 鑫 · 十二月 11, 2021 2m read

第十二章 SQL谓词 %INSET

将一个值匹配到一组生成的值。

大纲

scalar-expression %INSET valueset [SIZE ((nn))]

参数

  • scalar-expression - 一个标量表达式(最常见的是表的RowId字段),它的值正在与值集进行比较。
  • valueset - 对实现方法的用户定义对象的对象引用(oref)。 该方法接受一组数据值,并在与标量表达式中的值匹配时返回一个布尔值。
  • - 可选-用于查询优化的数量级整数(等)。

描述

谓词允许通过选择与值集中指定的值相匹配的数据值来筛选结果集。 当标量表达式的值与中的值匹配时,此匹配将成功。 如果值集值不匹配任何标量表达式值,%INSET返回空字符串。 无论显示模式如何,这个匹配总是在逻辑(内部存储)数据值上执行。

对于值,永远不为真。 因此,它不会将标量表达式中的NULL与值集中的相匹配。

与其他比较条件一样,用于语句的子句或子句中。

启用使用抽象的、编程指定的匹配值集过滤字段值。 具体地说,它使用抽象的、编程指定的临时文件或位图索引来过滤RowId字段值,其中的值集行为类似于位图索引或常规索引的最低下标层。

用户定义的类派生自抽象类。此抽象类定义ContainsItem()方法,该方法是唯一支持的方法。方法返回值集。

排序类型

使用与它匹配的列相同的排序规则类型。

0
0 153
文章 姚 鑫 · 十二月 10, 2021 8m read

第十一章 SQL谓词 %INLIST

将一个值匹配到%List结构化列表中的元素。

大纲

scalar-expression %INLIST list [SIZE ((nn))]

参数

  • scalar-expression - 将其值与列表元素进行比较的标量表达式(最常见的是数据列)。
  • list - 包含一个或多个元素的%List结构。
  • SIZE ((nn)) - 可选-指定列表中元素数量估计值的整数。 必须指定为具有下列值之一的字面值:10100、、,等等。

描述

谓词是 IRIS扩展,用于将字段的值与列表结构的元素匹配。 和都允对多个指定值执行这样的相等比较。 将这些多个值指定为单个列表参数的元素。 因此,允许改变要匹配的值的数量,而无需创建单独的缓存查询。

可选的子句提供整数,它指定list中列表元素数量的数量级估计数。 IRIS使用这个数量级估计来确定最佳查询计划。 因为不管列表中元素的数量是多少,都会使用相同的缓存查询,所以指定允许创建缓存查询,针对列表中预期的元素的大致数量进行优化。 更改字面值将创建一个单独的缓存查询。 指定为以下文字之一:、、、,等等。 因为必须在编译时作为常量值可用,所以在所有SQL代码中必须将其指定为文字。 注意,必须为所有已编译SQL ()指定双括号。 双括号不用于嵌入式SQL。

0
0 91
文章 姚 鑫 · 十二月 9, 2021 5m read

第十章 SQL谓词 IN

将值匹配到以逗号分隔的非结构化列表中的项。

大纲

scalar-expression IN (item1,item2[,...])

scalar-expression IN (subquery)

参数

  • scalar-expression - 标量表达式(最常见的是数据列),将其值与以逗号分隔的值列表或子查询生成的结果集进行比较。
  • item - 一个或多个文本值、输入主机变量或解析为文本值的表达式。 以任何顺序列出,以逗号分隔。
  • subquery - 一个用括号括起来的子查询,它从单个列返回一个结果集,用于与标量表达式进行比较。

描述

谓词用于将值匹配到非结构化的项系列。 通常,它将列数据值与以逗号分隔的值列表进行比较。 可以执行相等比较和子查询比较。

与大多数谓词一样,可以使用NOT逻辑操作符反转。 和NOT IN都不能用于返回空字段。 返回字段使用。

可以在任何可以指定谓词条件的地方使用IN,如本手册的谓词概述页面所述。

相等测试

谓词可以用作多个相等比较的简写,这些比较用操作符连接在一起。 例如:

SELECT Name, Home_State FROM Sample.Person
WHERE Home_State IN ('ME','NH','VT','MA','RI','CT') 
0
0 130
文章 姚 鑫 · 十二月 8, 2021 5m read

第九章 SQL谓词 FOR SOME %ELEMENT

将列表元素值或列表元素的数量与谓词匹配。

大纲

FOR SOME %ELEMENT(field) [[AS] e-alias] (predicate)

参数

  • field - 将其元素与谓词进行比较的标量表达式(最常见的是数据列)。
  • AS e-alias - 可选-用于限定谓词中的%KEY%VALUE的元素别名。通常,当谓词包含嵌套的某些条件时,会使用此别名。别名必须是有效的标识符。
  • - 用括号括起来的谓词条件。 在这个条件中,使用和/或来确定条件匹配的是什么。 匹配元素值()。 匹配元素的最小数目()。 在此条件下,如果您指定了, 和可能是可选限定的。 这个谓词可以由多个带有和逻辑运算符的条件表达式组成。

描述

谓词将字段中的列表元素与指定的谓词匹配。 关键字指定字段中至少有一个元素必须满足指定的谓词子句。

谓词子句必须包含或关键字,后跟谓词条件。 这些关键字不区分大小写。

下面的例子解释了%VALUE和的用法:

  • 匹配所有包含值作为其列表元素之一的字段值。 该字段可以只包含单个元素Red,也可以包含多个元素,其中一个元素是。
  • 匹配所有包含至少个元素的字段值。 字段可以包含两个元素,也可以包含两个以上的元素。 值必须为正整数。 不匹配任何字段值。

FOR SOME %ELEMENT 不能用于匹配为空的字段。

0
0 104
文章 姚 鑫 · 十二月 7, 2021 4m read

第八章 SQL谓词 FOR SOME

确定是否根据字段值的条件测试返回记录。

大纲

FOR SOME (table [AS t-alias]) (fieldcondition)

参数

  • table - Table可以是单个表,也可以是用逗号分隔的表列表。 括号是必须的。

  • AS t-alias - 可选-前一个表名的别名。 别名必须是有效的标识符; 它可以是一个分隔符。

  • - fieldcondition 指定一个或多个引用一个或多个字段的条件表达式。 字段条件用括号括起来。 可以使用AND(&)和逻辑操作符在字段条件中指定多个条件表达式。

描述

谓词允许根据表中一个或多个字段值的布尔条件测试来决定是否返回记录。 如果计算结果为,则返回记录。 如果计算结果为,则不返回记录。

对于表(及其可选的)参数,必须使用括号分隔。 分隔括号对于字段条件参数也是强制性的。 允许(但不是必需的)在这两组括号之间使用空格。

通常,用于确定是否根据另一个表中一条记录的内容从一个表返回一条记录。 FOR SOME还可用于确定是否根据同一表中记录的内容从表中返回记录。 在后一种情况下,要么返回所有记录,要么不返回任何记录。

在下面的示例中,返回表中其Name字段值与表中的字段值匹配的所有记录:

SELECT Name,COUNT(Name) AS NameCount
FROM Sample.Person AS p
WHERE FOR SOME (Sample.Employee AS e)(e.Name=p.Name)
ORDER BY Name
0
0 164
文章 姚 鑫 · 十二月 6, 2021 2m read

第七章 SQL谓词 %FIND

使用位图块迭代将一个值匹配到一组生成的值。

大纲

scalar-expression %FIND valueset [SIZE ((nn))]

参数

  • scalar-expression - 一个标量表达式(最常见的是表的RowId字段),它的值正在与值集进行比较。
  • valueset - 对用户定义对象的对象引用(),该对象实现位图块迭代方法和ContainsItem()方法。 该方法接受一组数据值,并在与标量表达式中的值匹配时返回一个布尔值。
  • - 可选-用于查询优化的数量级整数(、100、等)。

描述

通过选择与值集中指定的值相匹配的数据值,通过迭代位图块序列中的值,谓词允许筛选结果集。 当标量表达式的值与中的值匹配时,此匹配将成功。 如果值集值不匹配任何标量表达式值,%FIND返回空字符串。 无论显示模式如何,这个匹配总是在逻辑(内部存储)数据值上执行。

和其他比较条件一样,用于语句的子句或子句中。

使用抽象的、通过编程指定的匹配值集来过滤字段值。 具体来说,它使用抽象的、编程指定的位图来过滤字段值,其中的值集行为类似于位图索引的下标层。

用户定义类派生自抽象类%SQL.AbstractFind。 这个抽象类定义了布尔方法。 ContainsItem()方法将标量表达式值与值集值匹配。

0
0 123