1 关注者 · 491 帖子

SQL 是在关系数据库中存储、操作和检索数据的标准语言。

文章 姚 鑫 · 一月 13, 2022 3m read

第二十三章 SQL函数 CAST(二)

转换位值

可以将expr值转换为BIT以返回01。 如果expr1或任何其他非零数值,则返回1。 如果expr“TRUE”“TRUE”“TRUE”,则返回1。 (“True”可以用任何大小写组合表示,但不能缩写为“T”。) 如果expr是任何其他非数值值,则返回0。 如果expr0,则返回0

在下面的例子中,前5CAST操作返回1,后5CAST操作返回0:

SELECT CAST(1 AS BIT) AS One, 
       CAST(7 AS BIT) AS Num,      
       CAST(743.6 AS BIT) AS Frac,  
       CAST(0.3 AS BIT) AS Zerofrac,
       CAST('tRuE' AS BIT) AS TrueWord,
       CAST(0 AS BIT) AS Zero,  
       CAST('FALSE' AS BIT) AS FalseWord, 
       CAST('T' AS BIT) AS T,    
       CAST('F' AS BIT) AS F,   
       CAST(0.
0
0 111
文章 姚 鑫 · 一月 11, 2022 1m read

第二十一章 SQL函数 ATAN2

接受两个坐标并返回以弧度为单位的反正切角的标量数值函数。

注意:IRIS可用,IRIS以下不可用。

大纲

{fn ATAN2(y,x)}

参数

  • y - 指定y轴坐标的数值表达式。
  • x - 指定x轴坐标的数值表达式。

ATAN2返回NUMERICDOUBLE数据类型。 如果数值表达式是数据类型DOUBLE, ATAN2返回DOUBLE; 否则,返回NUMERIC

描述

ATAN2采用射线(y,x)的笛卡尔坐标,并以浮点数的形式返回角的正切反(弧)。 用两个坐标的符号来确定笛卡尔坐标。 当x为正值时,ATAN2返回与ATAN(y/x)相同的值。 如果传递一个NULL值,ATAN2将返回NULLATAN2将非数字字符串(包括空字符串("))视为数字值0

ATAN2返回一个精度为36、刻度为18的值。

ATAN2只能用作ODBC标量函数(使用花括号语法)。

可以使用DEGREES函数将弧度转换为角度。 可以使用RADIANS函数来转换角度到弧度。

示例

下面的例子调用ATAN2:

SELECT {fn ATAN2(15,30)} AS ArcTangent 

0.463647609000806116
0
0 104
文章 姚 鑫 · 一月 10, 2022 1m read

第二十章 SQL函数 ATAN

一个标量数值函数,返回角的正切的弧切值(以弧度为单位)。

大纲

{fn ATAN(numeric-expression)}

参数

  • numeric-expression - 一个数值表达式。 这是这个角的正切。

ATAN返回NUMERICDOUBLE数据类型。 如果数值表达式是数据类型DOUBLE, ATAN返回DOUBLE; 否则,返回NUMERIC

描述

ATAN接受任何数值,并以浮点数返回角度正切的反(弧)值。 如果传递一个NULL值,ATAN将返回NULLATAN将非数字字符串(包括空字符串("))视为数字值0

ATAN返回一个精度为36、刻度为18的值。

ATAN只能用作ODBC标量函数(使用花括号语法)。

可以使用DEGREES函数将弧度转换为角度。 可以使用RADIANS函数来转换角度到弧度。

示例

下面的例子展示了ATAN的效果:

SELECT {fn ATAN(0.52)} AS ArcTangent 

0.479519291992596165
0
0 108
文章 姚 鑫 · 一月 9, 2022 1m read

第十九章 SQL函数 ASIN

一个标量数值函数,返回角的正弦的反正弦(以弧度为单位)。

大纲

{fn ASIN(numeric-expression)}

参数

  • numeric-expression - 数值在-1到1之间的数值表达式。 这是这个角的正弦值。

ASIN返回NUMERICDOUBLE数据类型。 如果数值表达式是数据类型DOUBLE, ASIN返回DOUBLE; 否则,返回NUMERIC

描述

ASIN以浮点数的形式返回角度正弦的反(弧)值。 numeric-expression的值必须是有符号的十进制数,取值范围为1 ~ -1(含1)。 超出此范围的数字将导致运行时错误,生成SQLCODE -400(发生致命错误)。 如果传递一个NULL值,ASIN将返回NULLASIN将非数字字符串(包括空字符串("))视为数字值0

ASIN返回一个精度为19、刻度为18的值。

ASIN只能用作ODBC标量函数(使用花括号语法)。

可以使用DEGREES函数将弧度转换为角度。 可以使用RADIANS函数来转换角度到弧度。

示例

下面的例子展示了ASIN对两个正弦的影响。

SELECT {fn ASIN(0.52)} AS ArcSine 

0.54685095069594411
SELECT {fn ASIN(-1.00)} AS ArcSine 

-1.
0
0 159
文章 姚 鑫 · 一月 8, 2022 1m read

第十八章 SQL函数 ASCII

一个字符串函数,返回字符串表达式的第一个(最左边)字符的整型ASCII码值。

大纲

ASCII(string-expression)

{fn ASCII(string-expression)}

参数

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

描述

如果传入一个NULL或空字符串值,ASCII将返回NULL。 空字符串返回NULLSQL Server一致。

SELECT ASCII('Z') AS AsciiCode

90
SELECT {fn ASCII('ZEBRA')} AS AsciiCode 

90

在执行ASCII转换之前,SQL将数字转换为规范形式。 下面的例子返回55,它是数字7的ASCII值:

SELECT ASCII(+007) AS AsciiCode

55

如果数字以字符串的形式表示,则不执行此数字解析。 下面的例子返回43,它是加(+)字符的ASCII值:

SELECT ASCII('+007') AS AsciiCode 

43
0
0 157
文章 姚 鑫 · 一月 7, 2022 1m read

第十七章 SQL函数 ACOS

一个标量数值函数,返回给定余弦的弧余弦(以弧度为单位)。

大纲

{fn ACOS(numeric-expression)}

参数

  • numeric-expression - 数值在-1到1之间的数值表达式。 这是这个角的余弦值。

ACOS返回NUMERICDOUBLE数据类型。 如果数值表达式是数据类型DOUBLE, ACOS返回DOUBLE; 否则,返回NUMERIC

描述

ACOS接受一个数值并以浮点数的形式返回余弦的反(弧)值。 numeric-expression的值必须是有符号的十进制数,取值范围为1 ~ -1(含1)。 超出此范围的数字将导致运行时错误,生成SQLCODE -400(发生致命错误)。 如果传入NULL值,ACOS将返回NULLACOS将非数字字符串(包括空字符串("))视为数字值0。

ACOS返回一个精度为19、刻度为18的值。

ACOS只能用作ODBC标量函数(使用花括号语法)。

可以使用DEGREES函数将弧度转换为角度。 可以使用RADIANS函数来转换角度到弧度。

示例

下面的例子展示了ACOS对两个余弦的影响:

SELECT {fn ACOS(0.52)} AS ArcCosine 

1.02394537609895251
SELECT {fn ACOS(-1)} AS ArcCosine

3.
0
0 99
文章 姚 鑫 · 一月 6, 2022 1m read

第十六章 SQL函数 ABS

返回数值表达式的绝对值的数值函数。

大纲

ABS(numeric-expression)

{fn ABS(numeric-expression)}

参数

  • numeric-expression - 要返回其绝对值的数字。

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

描述

ABS返回绝对值,它总是0或正数。 如果数值表达式不是一个数字(例如,字符串'abc',或空字符串''),ABS返回0。 当传递null值时,ABS返回

请注意,ABS可以用作ODBC标量函数(带有花括号语法),也可以用作SQL通用函数。

这个函数也可以通过调用ABS()方法从ObjectScript中调用:

  WRITE $SYSTEM.SQL.Functions.ABS(-0099)

示例

下面的例子展示了ABS的两种形式:

SELECT ABS(-99) AS AbsGen,{fn ABS(-99)} AS AbsODBC

下面的例子展示了ABS如何处理其他一些数字。 在调用ABS之前, SQL将数字表达式转换为规范形式,删除前导和末尾的零,并计算指数。

SELECT ABS(007) AS AbsoluteValue

7
SELECT ABS(-0.
0
0 98
文章 姚 鑫 · 一月 5, 2022 3m read

第十五章 SQL窗口函数概述(二)

ROW子句

ROW子句可以与FIRST_VALUE(字段)和SUM(字段)窗口函数一起使用。 可以为其他windows函数指定它,但不执行任何操作(有或没有ROWS子句的结果相同)。

ROWS子句有两种语法形式:

ROWS framestart
ROWS BETWEEN framestart AND frameend

Framestartframeend有五个可能的值:

UNBOUNDED PRECEDING                    /* 从当前分区的开头开始 */
offset PRECEDING   /* 开始偏移当前行之前的行数 */
CURRENT ROW                                      /* 从当前行开始 */
offset FOLLOWING  /* 继续偏移当前行后面的行数 */
UNBOUNDED FOLLOWING                  /* 继续到当前分区的末尾 */

ROWS子句语法可以在两个方向上指定一个范围。 例如,在无界前面和1后面之间的行以及在1后面和无界前面之间的行是完全相等的。

ROWS框架的开始语法默认为CURRENT ROW作为范围的第二个未指定的边界。

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

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

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

窗口函数和聚合函数

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

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

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

窗函数的语法

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

窗口函数执行与由PARTITION by子句、ORDER by子句和ROWS子句指定的逐行窗口相关的任务,并为每一行返回一个值。

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

第十三章 SQL聚合函数 XMLAGG

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

大纲

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

参数

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

描述

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

  • 一个简单的XMLAGG(或XMLAGG ALL)返回一个字符串,该字符串包含一个由所选行中string-expr的所有值组成的连接字符串。
0
0 317
文章 姚 鑫 · 一月 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可以指定BY(colo -list)子句,其中colo -list可以是单个字段,也可以是用逗号分隔的字段列表。
  • expression - 任何有效的表达式。 通常是包含要分析方差的数据值的列的名称。
  • %FOREACH(col-list) - 可选-列名或以逗号分隔的列名列表。
0
0 383
文章 姚 鑫 · 十二月 31, 2021 4m read

第十一章 SQL聚合函数 SUM

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

大纲

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

参数

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

SUM返回与expression相同的数据类型,但有如下异常:TINYINTSMALLINTINTEGER返回的数据类型都是INTEGER

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

描述

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

0
0 68
文章 姚 鑫 · 十二月 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可以指定BY(COL-LIST)子句,其中COL-LIST可以是单个字段,也可以是逗号分隔的字段列表。
  • expression - 任何有效的表达式。通常是包含要分析标准偏差的数据值的列的名称。
  • %FOREACH(col-list) - 可选-列名或逗号分隔的列名列表。
0
0 341
文章 姚 鑫 · 十二月 29, 2021 3m read

[toc]

第九章 SQL聚合函数 MIN

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

大纲

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

参数

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

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

描述

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

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

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

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

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

第八章 SQL聚合函数 MAX

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

大纲

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

参数

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

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

描述

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

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

MAX不能在WHERE子句中使用。 MAX不能在JOINON子句中使用,除非SELECT是子查询。

与大多数其他聚合函数一样,MAX不能应用于流字段。

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

第七章 SQL聚合函数 LIST

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

大纲

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

参数

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

描述

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

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

0
0 232
文章 姚 鑫 · 十二月 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数组,其中包含string-expr的所有值。 如果没有指定关键字,这是默认值。
  • DISTINCT - 可选-一个DISTINCT子句,指定JSON_ARRAYAGG返回一个仅包含唯一字符串expr值的JSON数组。 DISTINCT可以指定BY(colo -list)子句,其中colo -list可以是单个字段,也可以是用逗号分隔的字段列表。
  • string-expr - 计算结果为字符串的SQL表达式。 通常是所选表中列的名称。
  • %FOREACH(col-list) - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

描述

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

一个简单的JSON_ARRAYAGG(或JSON_ARRAYAGG ALL)返回一个JSON数组,其中包含所选行中string-expr的所有值。

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

第五章 SQL聚合函数 %DLIST

创建值列表的聚合函数。

大纲

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

参数

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

描述

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

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

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

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

权限

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

性能

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

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

未提交事务所做的更改

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

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

示例

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

SELECT COUNT(*) AS TotalPersons
     FROM Sample.
0
0 113
文章 姚 鑫 · 十二月 23, 2021 5m read

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

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

大纲

COUNT(*)

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

参数

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

COUNT返回BIGINT数据类型。

0
0 664
文章 姚 鑫 · 十二月 22, 2021 6m read

第二章 SQL聚合函数 AVG

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

大纲

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

参数

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

AVG返回NUMERICDOUBLE数据类型。 如果expressionDOUBLE类型,AVG返回DOUBLE; 否则,它返回NUMERIC

描述

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

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

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

第一章 聚合函数概述

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

支持聚合函数

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

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

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

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

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

注意:聚合函数类似于窗口函数。

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

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

首尾空格

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

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

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

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

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

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

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

SELECT Name,FavoriteColors FROM Sample.
0
0 92
文章 姚 鑫 · 十二月 18, 2021 5m read

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

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

大纲

scalar-expression %STARTSWITH substring

参数

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

描述

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

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

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

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

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

排序类型

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

0
0 231
文章 姚 鑫 · 十二月 17, 2021 1m read

第十八章 SQL谓词 SOME

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

大纲

scalar-expression comparison-operator SOME (subquery)

参数

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

描述

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

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

示例

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

SELECT Name,Salary,Home_State FROM Sample.
0
0 100
文章 姚 鑫 · 十二月 16, 2021 5m read

第十七章 SQL谓词 %PATTERN

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

大纲

scalar-expression %PATTERN pattern

参数

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

描述

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

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

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

0
0 169
文章 姚 鑫 · 十二月 15, 2021 5m read

第十六章 SQL谓词 %MATCHES

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

大纲

scalar-expression %MATCHES pattern [ESCAPE char]

参数

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

描述

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

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

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

  • ? - 匹配任意类型的任意单个字符。
0
0 147
文章 姚 鑫 · 十二月 14, 2021 7m read

第十五章 SQL谓词 LIKE

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

大纲

scalar-expression LIKE pattern [ESCAPE char]

参数

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

描述

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

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

LIKE谓词支持以下通配符:

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

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

注意:当在运行时提供谓词值时(使用?

0
0 143
文章 姚 鑫 · 十二月 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 / IS NOT NULL谓词是少数几个可以在WHERE子句中用于流字段的谓词之一。 如下面的例子所示:

SELECT Title,%OBJECT(Picture) AS PhotoOref FROM Sample.Employee
WHERE Picture IS NOT NULL

不应将IS NULL谓词与SQL ISNULL函数混淆。

0
0 97