无法下载老版本的cache,请问哪位可以分享下安装包
InterSystems Caché 是一个多模型 DBMS 和应用服务器。
查看此处提供的更多详细信息。
文档。
无法下载老版本的cache,请问哪位可以分享下安装包
列表函数,指示指定元素是否存在并具有数据值。
$LISTDATA(list[,position])
list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。您可以使用 SQL 或 ObjectScript 的 $LISTBUILD 或 $LISTFROMSTRING 函数创建列表。您可以使用 SQL 或 ObjectScript $LIST 函数从现有列表中提取列表。position - 可选 — 指定列表中元素的整数表达式。$LISTDATA 检查列表中请求元素中的数据。如果位置参数指示的元素在列表中并且具有数据值,则 $LISTDATA 返回值 1。如果元素不在列表中或没有数据值,则 $LISTDATA 返回值 0。
此函数返回 SMALLINT 类型的数据。
包含一个或多个元素的编码字符串。可以使用 SQL $LISTBUILD 函数或 ObjectScript $LISTBUILD 函数创建列表。可以使用 SQL $LISTFROMSTRING 函数或 ObjectScript $LISTFROMSTRING 函数将分隔字符串转换为列表。可以使用 SQL $LIST 函数或 ObjectScript $LIST 函数从现有列表中提取列表。
从字符串构建列表的列表函数。
$LISTBUILD(element [,...])
element - 任何表达式,或逗号分隔的表达式列表$LISTBUILD 接受一个或多个表达式,并为每个表达式返回一个包含一个元素的列表。
以下函数可用于创建列表:
$LISTBUILD,它从多个字符串创建一个列表,每个元素一个字符串。$LISTFROMSTRING,它从包含多个分隔元素的单个字符串创建一个列表。$LIST,从现有列表中提取子列表。$LISTBUILD 与其他 SQL 列表函数一起使用:$LIST、$LISTDATA、$LISTFIND、$LISTFROMSTRING、$LISTGET、$LISTLENGTH 和 $LISTTOSTRING。
注意:$LISTBUILD 和其他 $LIST 函数使用优化的二进制表示来存储数据元素。出于这个原因,等效性测试可能无法对某些 $LIST 数据按预期工作。在其他情况下可能被视为等效的数据可能具有不同的内部表示。例如,$LISTBUILD(1) 不等于 $LISTBUILD('1')。
在以下嵌入式 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 示例返回列表中的第二个元素“Blue”:
返回列表中元素的列表函数。
$LIST(list[,position[,end]])
list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。可以使用 SQL 或 ObjectScript 的 $LISTBUILD 或 $LISTFROMSTRING 函数创建列表。可以使用 SQL 或 ObjectScript $LIST 函数从现有列表中提取列表。position - 可选 - 指定列表中的起始位置。计算结果为整数的表达式。end - 可选 - 指定列表中的结束位置。计算结果为整数的表达式。$LIST 从列表中返回元素。返回的元素取决于使用的参数。
$LIST(list) 将列表中的第一个元素作为文本字符串返回。$LIST(list,position) 将指定位置指示的元素作为文本字符串返回。位置参数必须计算为整数。$LIST(list,position,end) 返回一个“子列表”(编码的列表字符串),其中包含从指定开始位置到指定结束位置的列表元素。此函数返回 VARCHAR 类型的数据。
v2015.1的更新检查表建议在Linux平台上设置TZ环境变量,并指出了tzset的手册。建议这样做是为了提高Caché的时间相关功能的性能。你可以在下文找到更多关于这个的信息:
我的CentOS 7测试系统上的manpage(RHEL 6也是这样说的)有这样的说法。
"tzset()函数从TZ环境变量初始化tzname变量。 这个函数会被其他依赖时区的时间转换函数自动调用"。
那么,你如何设置TZ?它是如何影响Linux服务器上的时间的?让我们来看看我们能学到什么:
在最近的大规模基准测试活动中,我们看到过多的%sys CPU时间,对应用程序的扩展产生了负面影响。
问题
我们发现,由于TZ环境变量没有被设置,很多时间都花在了localtime()系统调用上。 我们创建了一个简单的测试程序来证实这一观察结果,设置了TZ与未设置TZ的时间差和所需的CPU资源都是惊人的。 我们发现,当TZ没有设置时,从localtime()继承使用stat()系统调用到/etc/local_time是成本很高。
返回字符串中字符数或分隔子字符串数的字符串函数。
$LENGTH(expression[,delimiter])
expression - 目标字符串。它可以是数值、字符串文字、任何变量的名称或任何有效的表达式。delimiter - 可选 — 在目标字符串中划分不同子字符串的字符串。它必须是字符串文字,但可以是任意长度。括起来的引号是必需的。$LENGTH 返回 SMALLINT 数据类型。
$LENGTH 返回指定字符串中的字符数或指定字符串中的子字符串数,具体取决于使用的参数。
$LENGTH(expression) 返回字符串中的字符数。如果表达式为空字符串 (''),则 $LENGTH 返回 0。如果表达式为 NULL,则 $LENGTH 返回 0。$LENGTH(expression,delimiter) 返回字符串中子字符串的数量。 $LENGTH 返回由指定分隔符相互分隔的子字符串的数量。此数字始终等于在表达式字符串中找到的分隔符实例的数量加一。$LENGTH(expression) 和其他长度函数(LENGTH、CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH)都执行以下操作:
返回字符串表达式中字符数的字符串函数。
LENGTH(string-expression)
{fn LENGTH(string-expression)}
string-expression - 字符串表达式,可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)。LENGTH 返回 INTEGER 数据类型。
LENGTH 返回一个整数,表示给定字符串表达式的字符数,而不是字节数。字符串表达式可以是字符串(从中删除尾随空格)或数字( IRIS 将其转换为规范形式)。
请注意,LENGTH 可用作 ODBC 标量函数(使用花括号语法)或 SQL 通用函数。
LENGTH 和其他长度函数($LENGTH、CHARACTER_LENGTH、CHAR_LENGTH 和 DATALENGTH)都执行以下操作:
InterSystems IRIS的内码是UTF-16,因此它支持Unicode多语言字符集。对于其它字符编码,例如UTF-8、GB18030、Big 5,它会自动进行转码。例如对于简体中文,它将GB18030输入数据转换为UTF-16,或者将UTF-16数据转换为GB18030输出。
返回字符串表达式中字符数的字符串函数。
LEN(string-expression)
string-expression - 字符串表达式,可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHAR 或 VARCHAR)。LEN 返回 INTEGER 数据类型。
注意:LEN 函数是 LENGTH 函数的别名。
SELECT len("yaoxin")
6
标量字符串函数,返回从字符串表达式的开始(最左位置)开始的指定数量的字符。
{fn LEFT(string-expression,count)}
string-expression - 字符串表达式,它可以是列的名称、字符串字面值或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(如CHAR或VARCHAR)。count - 整数,指定从字符串表达式的起始位置返回的字符数。LEFT返回从字符串开始的指定字符数。
LEFT不填充字符串;
如果指定的字符数大于字符串中的字符数,则LEFT返回该字符串。
如果传递给任何一个参数一个NULL值,左返回NULL。
LEFT只能用作ODBC标量函数(使用花括号语法)。
以下示例返回 Sample.Person 表中每个名称的最左边的七个字符:
SELECT Name,{fn LEFT(Name,7)}AS ShortName
FROM Sample.Person
以下嵌入式 SQL 示例显示了 LEFT 如何处理比字符串本身长的计数:
万能的社区我在cache中创建一个视图时遇到了麻烦,其查询方式为:
SELECT column1, column2, column 3
FROM table
WHERE
(column1, columnn 2) IN (SELECT c1, c2 FROM table2 GROUP BY c1)
ORDER BY column1
我认为问题出在where子句上,因为它不能取两列: .
具体错误信息为: [SQLCODE: <-1>:<Invalid SQL statement>] [%msg: < ) expected, , found^ (column1,>]
请问如何解决? 谢谢!
从一系列表达式中返回最小值的函数。
LEAST(expression,expression[,...])
expression - 解析为数字或字符串的表达式。
将这些表达式的值相互比较,并返回最小值。
表达式可以是字段名、文字、算术表达式、主机变量或对象引用。
最多可以列出140个逗号分隔的表达式。LEAST从逗号分隔的表达式序列中返回最小值。
表达式按从左到右的顺序求值。
如果只提供一个表达式,则LEAST返回该值。
如果任何表达式为NULL, LEAST返回NULL。
如果所有表达式值都解析为规范数,则按数值顺序对它们进行比较。
如果引用的字符串包含规范格式的数字,则按数字顺序对其进行比较。
但是,如果引用的字符串包含非规范格式的数字(例如,'00'、'0.4'或'+4'),则将其作为字符串进行比较。
字符串比较按排序顺序逐字符执行。
任何字符串值都大于任何数字值。
空字符串大于任何数字值,但小于任何其他字符串值。
如果返回值是一个数字,LEAST将以规范格式返回它(删除前导和末尾的零,等等)。
如果返回值是一个字符串,LEAST将不改变返回值,包括任何开头或结尾的空格。
LEAST返回逗号分隔的一系列表达式中的最小值。
GREATEST返回逗号分隔的一系列表达式中的最大值。
COALESCE返回逗号分隔的一系列表达式中的第一个非null值。
将字符串中的所有大写字母转换为小写字母的大小写转换函数。
LCASE(string-expression)
{fn LCASE(string-expression)}
string-expression - 要将其字符转换为小写的字符串表达式。表达式可以是列名、字符串文字或另一个标量函数的结果,其中底层数据类型可以表示为任何字符类型(如CHAR或VARCHAR)。LCASE将大写字母转换为小写字母用于显示。
它对非字母字符没有影响。
它保留没有改变的标点符号以及前导和末尾的空格。
LCASE不强制将数字解释为字符串。
SQL将数字转换为规范形式,删除前导和后导零。
SQL不将数字字符串转换为规范形式。
LOWER函数也可以用来将大写字母转换为小写字母。
LCASE不影响排序。
对于不区分大小写的排序规则,%SQLUPPER函数是SQL中转换数据值的首选方法。
下面的例子以小写字母返回每个人的名字:
SELECT TOP 10 Name,{fn LCASE(Name)} AS LowName
FROM Sample.Person
LCASE也适用于Unicode(非ascii)字母字符,如下面的嵌入式SQL示例所示,它将希腊字母从大写转换为小写:
返回最后插入、更新、删除或读取的行的标识的标量函数。
LAST_IDENTITY()
LAST_IDENTITY函数返回%ROWID局部变量值。在嵌入式SQL或ODBC中将%ROWID局部变量设置为一个值。动态SQL、SQL Shell或管理门户SQL界面未将%ROWID局部变量设置为值。动态SQL改为设置%ROWID对象属性。
LAST_IDENTITY函数不接受任何参数。请注意,参数括号是必需的。
LAST_IDENTITY返回受当前进程影响的最后一行的标识字段值。如果表没有标识字段,则返回受当前进程影响的最后一行的行ID(%ROWID)。返回值为数据类型INTEGER。
INSERT、UPDATE、DELETE或TRUNCATE TABLE语句,LAST_IDENTITY返回最后修改的行的IDENTITY或%ROWID值。SELECT语句,LAST_IDENTITY返回检索到的最后一行的IDENTITY或%ROWID值。但是,如果基于游标的SELECT语句包括DISTINCT关键字或GROUP BY子句,则LAST_IDENTITY不会更改;它将返回其先前的值(如果有)。SELECT语句,LAST_IDENTITY不会更改。返回先前的值(如果有)。日期函数,它为日期表达式返回一个月的最后一天的日期。
LAST_DAY(date-expression)
date-expression - 表达式,它是列的名称、另一个标量函数的结果或日期或时间戳文字。LAST_DAY以整数形式返回指定月份的最后一天,格式为$HOROLOG。
计算闰年差异,包括世纪日调整:2000是闰年,1900和2100不是闰年。
日期表达式可以是一个日期整数、一个$HOROLOG或$ZTIMESTAMP值、一个ODBC格式的日期字符串或一个时间戳。
日期表达式时间戳可以是数据类型%Library.PosiTime(编码的64位有符号整数)或数据类型%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)。
%TIMESTAMP字符串的时间部分是可选的。
指定无效日期时,LAST_DAY返回0(显示模式为12/31/1840):日或月为零;大于12的月;或大于当年该月天数的日。年份必须在0001到9999之间。
也可以使用lastday()方法调用从ObjectScript调用此函数:
WRITE $SYSTEM.SQL.Functions.LASTDAY("2018-02-22"),!
WRITE $SYSTEM.SQL.Functions.LASTDAY(64701)
在指定宽度内右对齐值的函数,可以选择舍入到指定的小数位数。
$JUSTIFY(expression,width[,decimal])
expression - 要右对齐的值。它可以是数字值、字符串文字或解析为数字或字符串的表达式。width - 表达式要在其中右对齐的字符数。正整数或计算结果为正整数的表达式。decimal - 可选-小数位数。正整数或计算结果为正整数的表达式。将表达式中的小数位数四舍五入或填充到此值。如果指定DECIMAL,会将表达式视为数字。$JUSTIFY返回在指定宽度内右对齐的表达式指定的值。可以包括小数参数以在宽度内小数对齐数字。
$JUSTUST(expression,width):双参数语法在宽度内右对齐表达式。它不执行任何表达式转换。该表达式可以是数字字符串,也可以是非数字字符串。$JUSTUST(expression,width,decimal):3参数语法将表达式转换为规范数字,将小数位四舍五入或零填充为小数,然后在宽度内右对齐生成的数值。如果表达式是非数字字符串或NULL,会将其转换为0,填充,然后右对齐。好人不需要规则。
神秘博士
要成为日期和时间的主人并不是一件容易的事,在任何编程语言中,这总是一个问题,有时会让人感到困惑,我们将澄清并提出一些提示,使这项任务尽可能简单。
坐上TARDIS,我将把你变成一个时间领主。

将数据作为JSON对象返回的转换函数。
JSON_OBJECT(key:value [,key:value][,...] [NULL ON NULL | ABSENT ON NULL])
key:value - 键:值对或逗号分隔的键:值对列表。键是由单引号分隔的用户指定的文字字符串。值可以是列名、聚合函数、算术表达式、数字或字符串文字或文字NULL。ABSENT ON NULLNULL ON NULL - 可选-指定如何在返回的JSON对象中表示空值的关键字短语。NULL ON NULL(缺省值)表示带有单词NULL(未引号)的NULL(缺少)数据。在NULL上缺失将从JSON对象中省略NULL数据;当value为NULL且不保留占位符逗号时,它将删除key:value对。此关键字短语对空字符串值没有影响。JSON_OBJECT接受逗号分隔的键:值对列表(例如,‘MyKey’:colname),并返回包含这些值的JSON对象。可以指定任何单引号字符串作为键名;JSON_OBJECT不强制任何命名约定或对键名进行唯一性检查。可以为值指定列名或其他表达式。
以JSON数组形式返回数据的转换函数。
JSON_ARRAY(expression [,expression][,...] [NULL ON NULL | ABSENT ON NULL])
expression - 表达式或逗号分隔的表达式列表。这些表达式可以包括列名、聚合函数、算术表达式、文字和文字NULL。ABSENT ON NULLNULL ON NULL - 可选-指定如何在返回的JSON数组中表示空值的关键字短语。NULL ON NULL(缺省值)表示带有单词NULL(未引号)的NULL(缺少)数据。在NULL上不存在将从JSON数组中省略空数据;它不会保留占位符逗号。此关键字短语对空字符串值没有影响。Json_array接受表达式或(更常见的)逗号分隔的表达式列表,并返回包含这些值的JSON数组。Json_array可以在SELECT语句中与其他类型的SELECT-Items结合使用。可以在可以使用SQL函数的其他位置指定json_array,例如在WHERE子句中。
返回的JSON数组格式如下:
[ element1 , element2 , element3 ]
测试有效数字的数值函数。
ISNUMERIC(check-expression)
check-expression - 要计算的表达式。ISNUMERIC返回SMALLINT数据类型。
ISNUMERIC计算check-expression并返回下列值之一:
check表达式是有效数字,则返回1。有效数字可以是数字表达式,也可以是表示有效数字的字符串。
+-+34这样的数值表达式是有效的数字。check-expression不是有效数字,则返回0。任何包含非数字字符的字符串都不是有效数字。具有多个前导符号的数字字符串(如‘+-+34’)不会被计算为有效数字。编码列表始终返回0,即使其元素是有效数字也是如此。空字符串ISNUMERIC(‘’)返回0。check-expression为NULL,则返回NULL。ISNUMERIC(NULL)返回NULL。测试NULL并返回相应表达式的函数。
ISNULL(check-expression,replace-expression)
check-expression - 要计算的表达式。replace-expression - Check-Expression为NULL时返回的表达式。ISNULL返回与Check-Expression相同的数据类型。
ISNULL计算check-expression并返回以下两个值之一:
check-expression为NULL,则返回Replace-Expression。Check-Expression不为空,则返回Check-Expression。Replace-Expression的数据类型应该与Check-Expression的数据类型兼容。
请注意,ISNULL函数与NVL函数相同,后者是为了与Oracle兼容而提供的。
返回逻辑格式表达式的格式转换函数。
%INTERNAL(expression)
%INTERNAL expression
expression - 要转换的表达式。
字段名、包含字段名的表达式,或返回可转换数据类型(如DATE或%List)中的值的函数。%INTERNAL将表达式转换为逻辑格式,与当前选择模式(显示模式)无关。逻辑格式是数据的内存格式(对其执行操作的格式)。%INTERNAL通常用于选择列表SELECT-ITEM。
可以在WHERE子句中使用%INTERNAL,但强烈建议不要使用%INTERNAL,因为使用%INTERNAL会阻止在指定字段上使用索引,并且%INTERNAL会强制所有比较区分大小写,即使该字段有默认排序规则也是如此。
应用%INTERNAL会将列标题名称更改为诸如“Expression_1”之类的值;因此,通常需要指定列名别名,如下面的示例所示。
%INTERNAL将数据类型%DATE的值转换为整数数据类型值。%INTERNAL将数据类型%TIME的值转换为数字(15,9)数据类型值。之所以提供此转换,是因为ODBC或JDBC客户端不识别逻辑%DATE和%TIME值。
返回子字符串在字符串中的位置的字符串函数,具有可选的搜索起始点和出现次数。
INSTR(string,substring[,start[,occurrence]])
string - 要在其中搜索子字符串的字符串表达式。
它可以是列的名称、字符串字面值或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(如CHAR或VARCHAR2)。substring - 一个子字符串,被认为出现在字符串中。start - 可选-子字符串搜索的起始点,指定为正整数。
从字符串开始的字符计数,从1开始计数。
若要从字符串的开头开始搜索,请忽略此参数或指定从1开始。
起始值为0、空字符串、NULL或非数字值会导致INSTR返回0。
指定start为负数会导致INSTR返回<null>。occurrence - 可选-一个非零整数,指定从起始位置搜索时返回哪个子字符串。
默认情况是返回第一个出现的位置。INSTR返回INTEGER数据类型。
INSTR在字符串中查找子字符串,并返回子字符串的第一个字符的位置。
位置以整数形式返回,从字符串的开头开始计算。
如果substring没有找到,则返回0(0)。
如果传递给任何一个参数一个NULL值,INSTR将返回NULL。
测试NULL并返回适当表达式的函数。
IFNULL(expression-1,expression-2 [,expression-3])
{fn IFNULL(expression-1,expression-2)}
expression-1 - 要计算以确定是否为NULL的表达式。expression-2 - 如果expression-1为NULL,则返回的表达式。expression-3 - 可选-如果expression-1不是NULL返回的表达式。
如果没有指定expression-3,则当expression-1不是NULL时返回NULL值。返回的数据类型描述如下。
支持IFNULL作为SQL通用函数和ODBC标量函数。
请注意,虽然这两个执行非常相似的操作,但它们在功能上是不同的。
SQL通用函数支持三个参数。
ODBC标量函数支持两个参数。
SQL通用函数和ODBC标量函数的双参数形式是不一样的;
当expression-1不为空时,它们返回不同的值。
SQL通用函数计算表达式1是否为NULL。 它永远不会返回expression-1:
Time函数,它返回DateTime表达式的小时数。
{fn HOUR(time-expression)}
time-expression - 作为列名、另一个标量函数的结果或字符串或数字文字的表达式。它必须解析为日期时间字符串或时间整数,其中基础数据类型可以表示为%Time、%Timestamp或%PosiTime。Hour返回一个整数,指定给定时间或日期时间值的小时。小时是根据$HOROLOG或$ZTIMESTAMP值、ODBC格式的日期字符串或时间戳计算的。
时间表达式时间戳可以是数据类型%Library.PosiTime(编码的64位有符号整数),也可以是数据类型%Library.TimeStamp(yyyy-mm-dd hh:mm:ss.fff)。
要更改此默认时间格式,请使用SET OPTION命令。
请注意,可以提供时间整数(已用秒数),但不能提供时间字符串(hh:mm:ss)。必须提供日期时间字符串(yyyy-mm-dd hh:mm:ss)。可以省略日期时间字符串的秒(:ss)或分钟和秒(mm:ss)部分,但仍返回小时部分。日期时间字符串的时间部分必须是有效的时间值。未验证日期时间字符串的日期部分。
小时以24小时表示。小时数(HH)部分应该是介于0到23之间的整数。输入上的前导零是可选的;输出上不显示前导零。
从一系列表达式中返回最大值的函数。
GREATEST(expression,expression[,...])
expression - 解析为数字或字符串的表达式。
对这些表达式的值进行比较。
表达式可以是字段名、文字、算术表达式、主机变量或对象引用。
最多可以列出140个逗号分隔的表达式。GREATEST返回逗号分隔的一系列表达式中的最大值。
表达式按从左到右的顺序求值。
如果只提供一个表达式,则GREATEST返回该值。
如果任何表达式为NULL,则GREATEST返回NULL。
如果所有表达式值都解析为规范数,则按数值顺序对它们进行比较。
如果引用的字符串包含规范格式的数字,则按数字顺序对其进行比较。
但是,如果引用的字符串包含非规范格式的数字(例如,'00'、'0.4'或'+4'),则将其作为字符串进行比较。
字符串比较按排序顺序逐字符执行。
任何字符串值都大于任何数字值。
空字符串大于任何数字值,但小于任何其他字符串值。
如果返回值是一个数字,则GREATEST将以规范格式返回它(删除前导和末尾的零,等等)。
如果返回值是一个字符串,则GREATEST将不改变返回值,包括任何前导或末尾空格。
日期/时间函数,返回当前UTC日期和时间。
GETUTCDATE([precision])
precision - 可选-一个正整数,指定时间精度为小数秒的位数。
默认值是0(没有小数秒);
这个默认值是可配置的。GETUTCDATE返回通用时间常数(UTC)日期和时间作为时间戳。由于UTC时间在地球上的任何地方都是相同的,不依赖于当地时区,也不受当地时差(如夏令时)的影响,因此当不同时区的用户访问同一数据库时,此函数对于应用一致的时间戳非常有用。
GETUTCDATE可以返回%TIMESTAMP数据类型格式(yyyy-mm-dd hh:mm:ss.ffff)或%PosiTime数据类型格式(编码的64位有符号整数)的时间戳。以下规则确定返回哪种时间戳格式: