1 关注者 · 494 帖子

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

文章 姚 鑫 · 三月 17, 2022 2m read

第八十四章 SQL函数 $LISTFROMSTRING

从字符串创建列表的列表函数。

大纲

$LISTFROMSTRING(string[,delimiter])

参数

  • string - 要转换为 列表的字符串。此字符串包含一个或多个元素,由分隔符分隔。分隔符不会成为生成的列表的一部分。
  • delimiter - 可选 — 用于分隔字符串中的子字符串(元素)的分隔符。将分隔符指定为带引号的字符串。如果未指定分隔符,则默认为逗号 (,) 字符。

描述

$LISTFROMSTRING 接受一个包含分隔元素的带引号的字符串并返回一个列表。列表以不使用分隔符的编码格式表示数据。因此,列表可以包含所有可能的字符,并且非常适合位串数据。使用 ObjectScript 和 SQL $LIST 函数处理列表。

参数

string

字符串文字(用单引号括起来)、数字或计算结果为字符串的变量或表达式。此字符串可以包含一个或多个子字符串(元素),由分隔符分隔。字符串数据元素不得包含分隔符(或字符串),因为分隔符不包含在输出列表中。

delimiter

用于在输入字符串中分隔子字符串的字符(或字符串)。它可以是数字或字符串文字(括在单引号中)、变量的名称或计算结果为字符串的表达式。

通常,定界符是在字符串数据中从不使用的指定字符,但仅用作分隔子字符串的定界符。定界符也可以是多字符串,其中的各个字符可以在字符串数据中使用。

0
0 156
文章 姚 鑫 · 三月 16, 2022 4m read

第八十三章 SQL函数 $LISTFIND

列表函数,用于在指定列表中搜索请求的值。

大纲

$LISTFIND(list,value[,startafter])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。可以使用 SQL 或 ObjectScript 函数从现有列表中提取列表。
  • - 包含搜索元素的表达式。一个字符串。
  • - 可选 — 解释为列表位置的整数表达式。搜索从该位置之后的元素开始。0–1 是有效值; 从不返回元素。零是默认值。

描述

在指定列表中搜索请求值的第一个实例。搜索从 参数指示的位置之后的元素开始。如果省略 参数,则 假定 值为 并从第一个元素(元素 )开始搜索。如果找到该值,则 返回匹配元素的位置。如果未找到该值,则 返回 。如果 参数的值引用不存在的列表成员,则 函数也将返回 。

此函数返回 类型的数据。

示例

以下嵌入式 SQL 示例返回 ,即请求字符串第一次出现的位置:

/// d ##class(PHA.TEST.SQLFunction).ListFind()
ClassMethod ListFind()
{
	s a = $lb("Red","Blue","Green")
	&sql(
		SELECT $LISTFIND(:a, 'Blue') INTO :b
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"The position is ",b 
	}
}
0
0 153
文章 姚 鑫 · 三月 15, 2022 4m read

第八十二章 SQL函数 $LISTDATA

列表函数,指示指定元素是否存在并具有数据值。

大纲

$LISTDATA(list[,position])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。您可以使用 SQL 或 ObjectScript 函数从现有列表中提取列表。
  • - 可选 — 指定列表中元素的整数表达式。

描述

$LISTDATA 检查列表中请求元素中的数据。如果位置参数指示的元素在列表中并且具有数据值,则 返回值 1。如果元素不在列表中或没有数据值,则 返回值 0。

此函数返回 类型的数据。

参数

list

包含一个或多个元素的编码字符串。可以使用 SQL 函数或 ObjectScript $LISTBUILD 函数创建列表。可以使用 SQL 函数或 ObjectScript 函数将分隔字符串转换为列表。可以使用 SQL $LIST 函数或 ObjectScript 函数从现有列表中提取列表。

position

如果省略 参数, 将计算第一个元素。如果 参数的值为 ,则相当于指定列表的最后一个元素。如果 参数的值引用了一个不存在的列表成员,则 返回 。

0
0 109
文章 姚 鑫 · 三月 14, 2022 5m read

第八十一章 SQL函数 $LISTBUILD

从字符串构建列表的列表函数。

大纲

$LISTBUILD(element [,...])

参数

  • element - 任何表达式,或逗号分隔的表达式列表

描述

$LISTBUILD 接受一个或多个表达式,并为每个表达式返回一个包含一个元素的列表。

以下函数可用于创建列表:

  • $LISTBUILD,它从多个字符串创建一个列表,每个元素一个字符串。
  • $LISTFROMSTRING,它从包含多个分隔元素的单个字符串创建一个列表。
  • $LIST,从现有列表中提取子列表。

与其他 SQL 列表函数一起使用:、$LISTDATA、、、、 和 。

注意: 和其他 函数使用优化的二进制表示来存储数据元素。出于这个原因,等效性测试可能无法对某些 数据按预期工作。在其他情况下可能被视为等效的数据可能具有不同的内部表示。例如, 不等于 。

出于同样的原因, 返回的列表字符串值不应用于使用分隔符的字符搜索和解析函数,例如 和 $LENGTH 的两个参数形式。由 创建的列表中的元素不使用字符分隔符进行标记,因此可以包含任何字符。

示例

以下嵌入式 SQL 示例采用三个字符串并生成一个三元素列表:

DHC-APP>d ##class(PHA.TEST.SQLFunction).Lb()
RedWhiteBlue length 3
0
0 98
文章 姚 鑫 · 三月 13, 2022 5m read

第八十章 SQL函数 $LIST(二)

示例

在以下嵌入式 SQL 示例中,两个 WRITE 语句都返回“Red”,即列表中的第一个元素。第一个默认写入第一个元素,第二个写入第一个元素,因为位置参数设置为 1

/// d ##class(PHA.TEST.SQLFunction).Li4()
ClassMethod Li4()
{
	s a = $lb("Red", "Blue", "Green")
	&sql(SELECT $LIST(:a), $LIST(:a,1)
		INTO :b,:c )
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"The one-arg sublist is ",b
		w !,"The two-arg sublist is ",c }
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Li4()
 
The one-arg sublist is Red
The two-arg sublist is Red

以下嵌入式 SQL 示例返回列表中的第二个元素:

/// d ##class(PHA.TEST.SQLFunction).Li5()
ClassMethod Li5()
{
	s a = $lb("Red", "Blue", "Green")
	&sql(
		SELECT $LIST(:a,2)
		INTO :b 
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"The second element is ",b 
	}
}
0
0 162
文章 姚 鑫 · 三月 12, 2022 4m read

第七十九章 SQL函数 $LIST(一)

返回列表中元素的列表函数。

大纲

$LIST(list[,position[,end]])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。可以使用 SQL 或 ObjectScript 函数从现有列表中提取列表。
  • - 可选 - 指定列表中的起始位置。计算结果为整数的表达式。
  • - 可选 - 指定列表中的结束位置。计算结果为整数的表达式。

描述

从列表中返回元素。返回的元素取决于使用的参数。

  • $LIST(list) 将列表中的第一个元素作为文本字符串返回。
  • $LIST(list,position) 将指定位置指示的元素作为文本字符串返回。位置参数必须计算为整数。
  • $LIST(list,position,end) 返回一个“子列表”(编码的列表字符串),其中包含从指定开始位置到指定结束位置的列表元素。

此函数返回 类型的数据。

参数

list

包含一个或多个元素的编码字符串。可以使用 SQL 函数或 ObjectScript 函数创建列表。可以使用 SQL 函数或 ObjectScript 函数将分隔字符串转换为列表。

0
0 369
文章 姚 鑫 · 三月 11, 2022 5m read

第七十八章 SQL函数 $LENGTH

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

大纲

$LENGTH(expression[,delimiter])

参数

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

$LENGTH 返回 数据类型。

描述

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

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

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

和其他长度函数(、CHARACTER_LENGTH、 和

0
0 258
文章 姚 鑫 · 三月 10, 2022 4m read

第七十七章 SQL函数 LENGTH

返回字符串表达式中字符数的字符串函数。

大纲

LENGTH(string-expression)

{fn LENGTH(string-expression)}

参数

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

LENGTH 返回 INTEGER 数据类型。

描述

返回一个整数,表示给定字符串表达式的字符数,而不是字节数。字符串表达式可以是字符串(从中删除尾随空格)或数字( IRIS 将其转换为规范形式)。

请注意, 可用作 ODBC 标量函数(使用花括号语法)或 SQL 通用函数。

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

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

在执行以下操作时, 与其他长度函数(、、 和

0
0 119
文章 姚 鑫 · 三月 9, 2022 1m read

第七十六章 SQL函数 LEN

返回字符串表达式中字符数的字符串函数。

大纲

LEN(string-expression)

参数

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

LEN 返回 INTEGER 数据类型。

描述

注意: 函数是 函数的别名。

SELECT len("yaoxin")  

6
0
0 123
文章 姚 鑫 · 三月 8, 2022 2m read

第七十五章 SQL函数 LEFT

标量字符串函数,返回从字符串表达式的开始(最左位置)开始的指定数量的字符。

大纲

{fn LEFT(string-expression,count)}

参数

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

描述

LEFT返回从字符串开始的指定字符数。 不填充字符串; 如果指定的字符数大于字符串中的字符数,则返回该字符串。 如果传递给任何一个参数一个值,左返回。

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

示例

以下示例返回 表中每个名称的最左边的七个字符:

SELECT Name,{fn LEFT(Name,7)}AS ShortName
     FROM Sample.Person

以下嵌入式 SQL 示例显示了 LEFT 如何处理比字符串本身长的计数:

/// d ##class(PHA.TEST.SQLCommand).Left()
ClassMethod Left()
{
	&sql(
		SELECT Name,{fn LEFT(Name,40)}
		INTO :a,:b
		FROM Sample.Person
	)
	if SQLCODE'=0 {
		w !,"Error code ",SQLCODE 	
	} else {
		w !,a,"=original",!,b,"=LEFT 40" }
}
0
0 112
文章 姚 鑫 · 三月 7, 2022 3m read

第七十四章 SQL函数 LEAST

从一系列表达式中返回最小值的函数。

大纲

LEAST(expression,expression[,...])

参数

  • expression - 解析为数字或字符串的表达式。 将这些表达式的值相互比较,并返回最小值。 表达式可以是字段名、文字、算术表达式、主机变量或对象引用。 最多可以列出140个逗号分隔的表达式。

描述

LEAST从逗号分隔的表达式序列中返回最小值。 表达式按从左到右的顺序求值。 如果只提供一个表达式,则LEAST返回该值。 如果任何表达式为, 返回。

如果所有表达式值都解析为规范数,则按数值顺序对它们进行比较。 如果引用的字符串包含规范格式的数字,则按数字顺序对其进行比较。 但是,如果引用的字符串包含非规范格式的数字(例如,、或'+4'),则将其作为字符串进行比较。 字符串比较按排序顺序逐字符执行。 任何字符串值都大于任何数字值。

空字符串大于任何数字值,但小于任何其他字符串值。

如果返回值是一个数字,将以规范格式返回它(删除前导和末尾的零,等等)。 如果返回值是一个字符串,将不改变返回值,包括任何开头或结尾的空格。

LEAST返回逗号分隔的一系列表达式中的最小值。 返回逗号分隔的一系列表达式中的最大值。 COALESCE返回逗号分隔的一系列表达式中的第一个非值。

返回值数据类型

0
0 111
文章 姚 鑫 · 三月 6, 2022 2m read

第七十三章 SQL函数 LCASE

将字符串中的所有大写字母转换为小写字母的大小写转换函数。

大纲

LCASE(string-expression)

{fn LCASE(string-expression)}

参数

  • string-expression - 要将其字符转换为小写的字符串表达式。表达式可以是列名、字符串文字或另一个标量函数的结果,其中底层数据类型可以表示为任何字符类型(如CHARVARCHAR)。

描述

LCASE将大写字母转换为小写字母用于显示。 它对非字母字符没有影响。 它保留没有改变的标点符号以及前导和末尾的空格。

LCASE不强制将数字解释为字符串。 将数字转换为规范形式,删除前导和后导零。 SQL不将数字字符串转换为规范形式。

函数也可以用来将大写字母转换为小写字母。

不影响排序。 对于不区分大小写的排序规则,%SQLUPPER函数是SQL中转换数据值的首选方法。

示例

下面的例子以小写字母返回每个人的名字:

SELECT TOP 10 Name,{fn LCASE(Name)} AS LowName
     FROM Sample.Person

也适用于(非ascii)字母字符,如下面的嵌入式SQL示例所示,它将希腊字母从大写转换为小写:

/// d ##class(PHA.TEST.SQLCommand).LCase()
ClassMethod LCase()
{
	s a = $CHAR(920,913,923,913,931,931,913)
	&sql(
		SELECT LCASE(:a) INTO :b 
	)
	if SQLCODE'=0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,a,!,b 
	}
}
0
0 170
文章 姚 鑫 · 三月 5, 2022 2m read

第七十二章 SQL函数 LAST_IDENTITY

返回最后插入、更新、删除或读取的行的标识的标量函数。

大纲

LAST_IDENTITY()

描述

LAST_IDENTITY函数返回%ROWID局部变量值。在嵌入式或中将局部变量设置为一个值。动态SQL、SQL Shell或管理门户SQL界面未将局部变量设置为值。动态SQL改为设置对象属性。

函数不接受任何参数。请注意,参数括号是必需的。

返回受当前进程影响的最后一行的标识字段值。如果表没有标识字段,则返回受当前进程影响的最后一行的行ID(%ROWID)。返回值为数据类型INTEGER

  • 对于嵌入式SQL INSERTUPDATE、或语句,返回最后修改的行的或值。
  • 对于嵌入式SQL基于游标的语句,返回检索到的最后一行的或值。但是,如果基于游标的语句包括关键字或子句,则不会更改;它将返回其先前的值(如果有)。
  • 对于嵌入式SQL单行(非游标)语句,不会更改。返回先前的值(如果有)。

在进程启动时,返回。在新的之后,返回。

如果没有行受操作影响,则不会更改;返回其先前的值(如果有)。在新的之后,调用返回,但调用会生错误。

示例

以下示例使用两个嵌入式SQL程序返回。第一个示例创建一个新表,第二个示例使用数据填充该表,然后对数据执行基于游标的SELECT,并为每个操作返回。

请按显示的顺序运行这两个嵌入式SQL程序。

0
0 134
文章 姚 鑫 · 三月 4, 2022 2m read

第七十一章 SQL函数 LAST_DAY

日期函数,它为日期表达式返回一个月的最后一天的日期。

大纲

LAST_DAY(date-expression)

参数

  • date-expression - 表达式,它是列的名称、另一个标量函数的结果或日期或时间戳文字。

描述

LAST_DAY以整数形式返回指定月份的最后一天,格式为$HOROLOG。 计算闰年差异,包括世纪日调整:是闰年,和不是闰年。

日期表达式可以是一个日期整数、一个或值、一个ODBC格式的日期字符串或一个时间戳。

日期表达式时间戳可以是数据类型%Library.PosiTime(编码的64位有符号整数)或数据类。

字符串的时间部分是可选的。

指定无效日期时,返回0(显示模式为12/31/1840):日或月为零;大于12的月;或大于当年该月天数的日。年份必须在到之间。

也可以使用方法调用从ObjectScript调用此函数:

  WRITE $SYSTEM.SQL.Functions.LASTDAY("2018-02-22"),!
  WRITE $SYSTEM.SQL.Functions.LASTDAY(64701)

示例

以下示例将该月的最后一天作为日期整数返回。该值是显示为整数还是日期字符串取决于当前的SQL显示模式设置。

以下两个示例都返回数字(对应于

0
0 136
文章 姚 鑫 · 三月 3, 2022 4m read

第七十章 SQL函数 $JUSTIFY

在指定宽度内右对齐值的函数,可以选择舍入到指定的小数位数。

大纲

$JUSTIFY(expression,width[,decimal])

参数

  • expression - 要右对齐的值。它可以是数字值、字符串文字或解析为数字或字符串的表达式。
  • width - 表达式要在其中右对齐的字符数。正整数或计算结果为正整数的表达式。
  • decimal - 可选-小数位数。正整数或计算结果为正整数的表达式。将表达式中的小数位数四舍五入或填充到此值。如果指定DECIMAL,会将表达式视为数字。

描述

返回在指定宽度内右对齐的表达式指定的值。可以包括小数参数以在宽度内小数对齐数字。

  • $JUSTUST(expression,width):双参数语法在宽度内右对齐表达式。它不执行任何表达式转换。该表达式可以是数字字符串,也可以是非数字字符串。
  • :3参数语法将表达式转换为规范数字,将小数位四舍五入或零填充为小数,然后在宽度内右对齐生成的数值。如果表达式是非数字字符串或NULL,会将其转换为0,填充,然后右对齐。

$JUSTIFY识别当前区域设置的字符。 它根据需要添加或删除DecimalSeparator字符。 字符取决于区域设置; 通常,美式格式的语言环境使用句号(),欧式格式的语言环境使用逗号()。 要为区域设置确定

0
0 137
文章 姚 鑫 · 三月 1, 2022 8m read

第六十九章 SQL函数 JSON_OBJECT

将数据作为JSON对象返回的转换函数。

大纲

JSON_OBJECT(key:value [,key:value][,...] [NULL ON NULL | ABSENT ON NULL])

参数

  • key:value - 键:值对或逗号分隔的键:值对列表。键是由单引号分隔的用户指定的文字字符串。值可以是列名、聚合函数、算术表达式、数字或字符串文字或文字NULL
  • ABSENT ON NULL - 可选-指定如何在返回的JSON对象中表示空值的关键字短语。(缺省值)表示带有单词(未引号)的(缺少)数据。在上缺失将从对象中省略数据;当为且不保留占位符逗号时,它将删除对。此关键字短语对空字符串值没有影响。

描述

接受逗号分隔的键:值对列表(例如,),并返回包含这些值的JSON对象。可以指定任何单引号字符串作为键名;不强制任何命名约定或对键名进行唯一性检查。可以为值指定列名或其他表达式。

可以在语句中与其他类型的SELECT-Items结合使用。可以在可以使用SQL函数的其他位置指定,例如在子句中。

返回的对象格式如下:

{ "key1" : "value1" , "key2" : "value2" , "key3" : "value3" }
0
0 186
文章 姚 鑫 · 二月 28, 2022 5m read

第六十八章 SQL函数 JSON_ARRAY

JSON数组形式返回数据的转换函数。

大纲

JSON_ARRAY(expression [,expression][,...] [NULL ON NULL | ABSENT ON NULL])

参数

  • expression - 表达式或逗号分隔的表达式列表。这些表达式可以包括列名、聚合函数、算术表达式、文字和文字NULL
  • ABSENT ON NULL - 可选-指定如何在返回的JSON数组中表示空值的关键字短语。(缺省值)表示带有单词(未引号)的(缺少)数据。在上不存在将从数组中省略空数据;它不会保留占位符逗号。此关键字短语对空字符串值没有影响。

描述

接受表达式或(更常见的)逗号分隔的表达式列表,并返回包含这些值的数组。可以在语句中与其他类型的结合使用。可以在可以使用SQL函数的其他位置指定,例如在子句中。

返回的数组格式如下:

[ element1 , element2 , element3 ]

Json_array以字符串(用双引号括起来)或数字形式返回每个数组元素值。数字以规范格式返回。数字字符串以文字形式返回,用双引号括起来。所有其他数据类型(例如,或)都作为字符串返回。

不支持将星号()语法作为指定表中所有字段的方式。它支持COUNT(*)聚合函数。

返回的数组列被标记为表达式(默认情况下);可以为指定列别名。

0
0 529
文章 姚 鑫 · 二月 27, 2022 2m read

第六十七章 SQL函数 ISNUMERIC

测试有效数字的数值函数。

大纲

ISNUMERIC(check-expression)

参数

  • check-expression - 要计算的表达式。

ISNUMERIC返回SMALLINT数据类型。

描述

计算并返回下列值之一:

  • 如果check表达式是有效数字,则返回1。有效数字可以是数字表达式,也可以是表示有效数字的字符串。
    • 数值表达式首先转换为规范形式,解析多个前导符号;因此,诸如+-+34这样的数值表达式是有效的数字。
    • 在求值之前不会转换数字字符串。数字字符串最多只能有一个前导符号才能计算为有效数字。带有尾随小数点的数字字符串的计算结果为有效数字。
  • 如果check-expression不是有效数字,则返回0。任何包含非数字字符的字符串都不是有效数字。具有多个前导符号的数字字符串(如)不会被计算为有效数字。编码列表始终返回0,即使其元素是有效数字也是如此。空字符串返回0。
  • 如果为,则返回。返回。

如果科学记数法指数大于308(308-(整数数)),会生成,指数超出范围错误。例如,和都会生成此错误代码。如果小于或等于的指数数字字符串返回1,则大于的指数数字字符串返回0。

函数与ObjectScript 函数非常相似。但是,当输入值为NULL时,这两个函数返回不同的值。

示例

0
0 136
文章 姚 鑫 · 二月 26, 2022 3m read

第六十六章 SQL函数 ISNULL

测试NULL并返回相应表达式的函数。

大纲

ISNULL(check-expression,replace-expression)

参数

  • check-expression - 要计算的表达式。
  • replace-expression - Check-ExpressionNULL时返回的表达式。

返回与相同的数据类型。

描述

计算并返回以下两个值之一:

  • 如果为,则返回Replace-Expression
  • 如果不为空,则返回。

的数据类型应该与的数据类型兼容。

请注意,ISNULL函数与函数相同,后者是为了与Oracle兼容而提供的。

日期和时间显示转换

某些检查表达式数据类型需要从逻辑模式转换为ODBC模式或显示模式。例如日期和时间数据类型。如果替换表达式值不是相同的数据类型,则不能在ODBC模式或显示模式下转换此值,并生成SQLCODE错误:日期数据类型为;时间数据类型为。例如,不能在ODBC模式或显示模式下执行;它会发出错误,并显示 。要在ODBC模式或显示模式下执行此语句,必须将值强制转换为适当的数据类型:。这将导致日期0,显示为。

比较的NULL处理函数

下表显示了各种SQL比较函数。如果逻辑比较测试为

0
0 95
文章 姚 鑫 · 二月 25, 2022 3m read

第六十五章 SQL函数 %INTERNAL

返回逻辑格式表达式的格式转换函数。

大纲

%INTERNAL(expression)

%INTERNAL expression

参数

  • expression - 要转换的表达式。 字段名、包含字段名的表达式,或返回可转换数据类型(如DATE%List)中的值的函数。

描述

%INTERNAL将表达式转换为逻辑格式,与当前选择模式(显示模式)无关。逻辑格式是数据的内存格式(对其执行操作的格式)。%INTERNAL通常用于选择列表。

可以在子句中使用,但强烈建议不要使用,因为使用会阻止在指定字段上使用索引,并且会强制所有比较区分大小写,即使该字段有默认排序规则也是如此。

应用会将列标题名称更改为诸如“Expression_1”之类的值;因此,通常需要指定列名别名,如下面的示例所示。

将数据类型%DATE的值转换为整数数据类型值。将数据类型的值转换为数字数据类型值。之所以提供此转换,是因为ODBC或JDBC客户端不识别逻辑和值。

是否转换日期取决于日期字段或函数返回的数据类型。转换CURDATE、、和值。它不转换、、、和值。

不能将流字段指定为ObjectScript一元函数(包括所有格式转换函数,除外)的参数。函数允许将流字段作为表达式值,但不对该流字段执行任何操作。

%INTERNAL

0
0 117
文章 姚 鑫 · 二月 24, 2022 3m read

第六十四章 SQL函数 INSTR

返回子字符串在字符串中的位置的字符串函数,具有可选的搜索起始点和出现次数。

大纲

INSTR(string,substring[,start[,occurrence]])

参数

  • string - 要在其中搜索子字符串的字符串表达式。 它可以是列的名称、字符串字面值或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(如CHARVARCHAR2)。
  • - 一个子字符串,被认为出现在字符串中。
  • - 可选-子字符串搜索的起始点,指定为正整数。 从字符串开始的字符计数,从1开始计数。 若要从字符串的开头开始搜索,请忽略此参数或指定从1开始。 起始值为0、空字符串、或非数字值会导致返回0。 指定为负数会导致返回。
  • - 可选-一个非零整数,指定从起始位置搜索时返回哪个子字符串。 默认情况是返回第一个出现的位置。

返回数据类型。

描述

在字符串中查找子字符串,并返回子字符串的第一个字符的位置。 位置以整数形式返回,从字符串的开头开始计算。 如果没有找到,则返回0(0)。 如果传递给任何一个参数一个值,将返回。

支持指定作为子字符串搜索的起始点。 INSTR还支持从起始点指定子字符串出现。

是区分大小写的。 使用其中一个大小写转换函数来定位字母或字符串的大写和小写实例。

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

0
0 207
文章 姚 鑫 · 二月 23, 2022 8m read

第六十三章 SQL函数 IFNULL

测试NULL并返回适当表达式的函数。

大纲

IFNULL(expression-1,expression-2 [,expression-3])

{fn IFNULL(expression-1,expression-2)}

参数

  • expression-1 - 要计算以确定是否为NULL的表达式。
  • expression-2 - 如果为NULL,则返回的表达式。
  • - 可选-如果不是NULL返回的表达式。 如果没有指定,则当不是时返回值。

返回的数据类型描述如下。

描述

支持IFNULL作为SQL通用函数和标量函数。 请注意,虽然这两个执行非常相似的操作,但它们在功能上是不同的。 SQL通用函数支持三个参数。 ODBC标量函数支持两个参数。 SQL通用函数和ODBC标量函数的双参数形式是不一样的; 当不为空时,它们返回不同的值。

SQL通用函数计算表达式1是否为NULL。 它永远不会返回expression-1:

  • 如果为,则返回expression-2
  • 如果不为,则返回。
  • 如果不为,并且没有expression-3,则返回。

ODBC标量函数计算是否为。 它要么返回expression-1,要么返回:

  • 如果为NULL,则返回。
  • 如果不为,则返回。

返回值数据类型

  • :返回的数据类型。 如果是数值字面值,则字符串字面值或
0
0 158
文章 Michael Lei · 二月 23, 2022 2m read

开发者们大家好!

你可能已经注意到了在IRIS 2021 Global的名字是随机的。

如果你用DDL来创建类而且想给Global一个确定的名字,实际上是可以做的。

在CREATE Table 里使用 WITH %CLASSPARAMETER DEFAULTGLOBAL='^GLobalName' ,如文档。参考以下例子:

0
0 199
文章 姚 鑫 · 二月 22, 2022 3m read

第六十二章 SQL函数 HOUR

Time函数,它返回DateTime表达式的小时数。

大纲

{fn HOUR(time-expression)}
  • time-expression - 作为列名、另一个标量函数的结果或字符串或数字文字的表达式。它必须解析为日期时间字符串或时间整数,其中基础数据类型可以表示为%Time%Timestamp或。

描述

Hour返回一个整数,指定给定时间或日期时间值的小时。小时是根据$HOROLOG或值、格式的日期字符串或时间戳计算的。

时间表达式时间戳可以是数据类型(编码的64位有符号整数),也可以是数据类型。

要更改此默认时间格式,请使用SET OPTION命令。

请注意,可以提供时间整数(已用秒数),但不能提供时间字符串()。必须提供日期时间字符串()。可以省略日期时间字符串的秒(:ss)或分钟和秒()部分,但仍返回小时部分。日期时间字符串的时间部分必须是有效的时间值。未验证日期时间字符串的日期部分。

小时以小时表示。小时数()部分应该是介于0到23之间的整数。输入上的前导零是可选的;输出上不显示前导零。

当小时部分为或时,小时返回小时的值。如果没有提供时间表达式,或者如果省略了时间表达式的小时部分(或),也会返回零小时。

同时可以使用或返回信息。

也可以使用 方法调用从ObjectScript调用此函数:

$SYSTEM.SQL.Functions.HOUR(time-expression)
0
0 172
文章 姚 鑫 · 二月 21, 2022 3m read

第六十一章 SQL函数 GREATEST

从一系列表达式中返回最大值的函数。

大纲

GREATEST(expression,expression[,...])

参数

  • expression - 解析为数字或字符串的表达式。 对这些表达式的值进行比较。 表达式可以是字段名、文字、算术表达式、主机变量或对象引用。 最多可以列出140个逗号分隔的表达式。

描述

GREATEST返回逗号分隔的一系列表达式中的最大值。 表达式按从左到右的顺序求值。 如果只提供一个表达式,则GREATEST返回该值。 如果任何表达式为,则返回。

如果所有表达式值都解析为规范数,则按数值顺序对它们进行比较。 如果引用的字符串包含规范格式的数字,则按数字顺序对其进行比较。 但是,如果引用的字符串包含非规范格式的数字(例如,、或'+4'),则将其作为字符串进行比较。 字符串比较按排序顺序逐字符执行。 任何字符串值都大于任何数字值。

空字符串大于任何数字值,但小于任何其他字符串值。

如果返回值是一个数字,则将以规范格式返回它(删除前导和末尾的零,等等)。 如果返回值是一个字符串,则将不改变返回值,包括任何前导或末尾空格。

GREATEST返回逗号分隔的一系列表达式中的最大值。 返回逗号分隔的一系列表达式中的最小值。 COALESCE返回逗号分隔的一系列表达式中的第一个非值。

返回值数据类型

0
0 132
文章 姚 鑫 · 二月 20, 2022 4m read

第六十章 SQL函数 GETUTCDATE

日期/时间函数,返回当前UTC日期和时间。

大纲

GETUTCDATE([precision])

参数

  • precision - 可选-一个正整数,指定时间精度为小数秒的位数。 默认值是0(没有小数秒); 这个默认值是可配置的。

描述

GETUTCDATE返回通用时间常数()日期和时间作为时间戳。由于时间在地球上的任何地方都是相同的,不依赖于当地时区,也不受当地时差(如夏令时)的影响,因此当不同时区的用户访问同一数据库时,此函数对于应用一致的时间戳非常有用。

可以返回数据类型格式(yyyy-mm-dd hh:mm:ss.ffff)或数据类型格式(编码的64位有符号整数)的时间戳。以下规则确定返回哪种时间戳格式:

  1. 如果当前UTC时间戳被提供给数据类型为的字段,则此时间戳值将以数据类型格式返回。例如,。
  2. 如果当前UTC时间戳被提供给数据类型为的字段,则此时间戳值以数据类型格式返回。其ODBC类型为,长度为,精度为。例如, 。
  3. 如果当前时间戳是在没有上下文的情况下提供的,则此时间戳值以数据类型格式返回。例如,。

要更改默认日期时间字符串格式,请使用带有各种日期和时间选项的命令。

的典型用法是在SELECT语句SELECT列表或查询的子句中。在设计报表时,可以使用在每次生成报表时打印当前日期和时间。对于跟踪活动也很有用,比如记录事务发生的时间。

0
0 158
文章 姚 鑫 · 二月 19, 2022 4m read

第五十九章 SQL函数 GETDATE

日期/时间函数,返回当前本地日期和时间。

大纲

GETDATE([precision])

参数

  • precision - 可选-一个正整数,指定时间精度为小数秒的位数。 默认值是0(没有小数秒); 这个默认值是可配置的。 精度值是可选的,括号是必选的。

描述

GETDATE将此时区的当前本地日期和时间作为时间戳返回;它根据本地时间变量(如夏令时)进行调整。

GETDATE可以返回数据类型格式(yyyy-mm-dd hh:mm:ss.ffff)或数据类型格式(编码的位有符号整数)的时间戳。以下规则确定返回哪种时间戳格式:

  1. 如果当前时间戳被提供给数据类型为%PosiTime的字段,则当前时间戳值将以POSIXTIME数据类型格式返回。例如, WHERE PosixField=GETDATE() or INSERT INTO MyTable (PosixField) VALUES (GETDATE())

  2. 如果当前时间戳被提供给数据类型为的字段,则当前时间戳值将以TIMESTAMP数据类型格式返回。其ODBC类型为,长度为,精度为,例如

0
0 230
文章 姚 鑫 · 二月 18, 2022 2m read

第五十八章 SQL函数 FLOOR

数值函数,返回小于或等于给定数值表达式的最大整数。

大纲

FLOOR(numeric-expression)

{fn FLOOR(numeric-expression)}

参数

  • numeric-expression - 下限要计算的数字。

FLOOR返回与NUMERIC-EXPRESSION相同的数据类型。

描述

返回小于或等于的最接近的整数值。返回值的小数位数为0。当为空值、空字符串()或非数字字符串时,返回。

请注意,可以作为ODBC标量函数(使用花括号语法)调用,也可以作为SQL常规函数调用。

也可以使用方法调用从ObjectScript调用此函数:

$SYSTEM.SQL.Functions.FLOOR(numeric-expression)

示例

以下示例显示如何将分数转换为其Floor整数:

SELECT FLOOR(167.111) AS FloorNum1,
       FLOOR(167.456) AS FloorNum2,
       FLOOR(167.999) AS FloorNum3

167	167	167
SELECT {fn FLOOR(167.00)} AS FloorNum1,
       {fn FLOOR(167)} AS FloorNum2
       
167	167
0
0 142
文章 Qiao Peng · 二月 18, 2022 6m read

在InterSystems IRIS和InterSystems Caché 里,是否您遇到过执行一个SQL Insert/Update语句,明明给的是正确的日期值,但被告知“值‘2022-01-01’ 校验失败”的类似情况,并感到困惑?

如果有,那么您需要了解一下InterSystems IRIS和InterSystems Caché保存和显示数据的模式。


一 数据模式

InterSystems IRIS和InterSystems Caché里,数据有3种模式,称之为SELECT MODE:
逻辑模式:这是数据被保存到InterSystems IRIS和InterSystems Cache'时的格式。例如,%Date类型的数据,在数据库里被保存为一个整数,即从1840年12月31号到这个日期的天数,而不是YYYY-MM-DD的格式。

ODBC模式:这是ODBC对数据定义的格式。在这个模式下,%Date类型的数据就会显示为YYYY-MM-DD的格式。

显示模式:这是数据在InterSystems IRIS和InterSystems Caché里默认的显示格式。例如在美国语言环境下,%Date的默认显示格式是DD/MM/YYYY格式。

InterSystems IRIS和InterSystems Caché只会使用逻辑模式保存数据,但可以以任何模式显示数据。

0
0 360
文章 姚 鑫 · 二月 17, 2022 4m read

第五十七章 SQL函数 $FIND

字符串函数,返回字符串中子字符串的结束位置,可选的搜索起始点。

大纲

$FIND(string,substring[,start])

参数

  • string - 要搜索的目标字符串。 它可以是变量名、数值、字符串字面值或任何有效表达式。
  • substring - 要搜索的子字符串。 它可以是变量名、数值、字符串字面值或任何有效表达式。
  • start - 可选-子字符串搜索的起始点,指定为正整数。 从字符串开始的字符计数,从1开始计数。 若要从字符串的开头开始搜索,请忽略此参数或指定从0或开始。 负数、空字符串或非数字值将被视为。 指定为会导致返回。

返回数据类型。

描述

返回一个整数,指定子字符串在字符串中的结束位置。 搜索字符串的子字符串。 如果找到子字符串,$FIND返回子字符串后面第一个字符的整数位置。 如果未找到,返回值。

可以包含选项来指定搜索的起始位置。 如果大于字符串中的字符数,返回一个值为。 如果省略,则默认为字符串位置。 如果起始值为、负数或非数字字符串,则位置是默认值。

是区分大小写的。 使用其中一个大小写转换函数来定位字母或字符串的大写和小写实例。

$FIND, POSITION, CHARINDEX, INSTR

, POSITION, 和都在字符串中搜索指定的子字符串,并返回与第一个匹配项对应的整数位置。

0
0 128