1 关注者 · 494 帖子

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

文章 姚 鑫 · 四月 16, 2022 2m read

第114章 SQL函数 RADIANS

将度数转换为弧度的数值函数。

大纲

RADIANS(numeric-expression)

{fn RADIANS(numeric-expression)}

参数

  • numeric-expression - 以度为单位的角度度量。解析为数值的表达式。

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

可以指定为标准标量函数或带有大括号语法的 ODBC 标量函数。

描述

以度为单位进行角度测量,并以弧度返回相应的角度测量。如果传递 NULL 值,RADIANS 将返回 。

返回值的默认精度为 ,默认小数位数为 。

可以使用 函数将弧度转换为度数。

示例

以下嵌入式 SQL 示例以 30 度为增量返回与从 到 的度值对应的弧度等效值:

/// d ##class(PHA.TEST.SQLFunction).Radians()
ClassMethod Radians()
{
	s a = 0
	while a < 366 {
		&sql(
			SELECT RADIANS(:a) INTO :b
		)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE 
		} else {
		w !,"degrees ",a," = radians ",b
		s a = a + 30 
		}
	}
}
0
0 130
文章 姚 鑫 · 四月 15, 2022 2m read

第113章 SQL函数 QUARTER

日期函数,它将一年中的季度作为日期表达式的整数返回。

大纲

{fn QUARTER(date-expression)}

参数

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

描述

QUARTER 返回一个从 1 到 的整数。季度是针对 日期整数、$HOROLOG 或 值、ODBC 格式日期字符串或时间戳计算的。

日期表达式时间戳可以是数据类型 (编码的 64 位有符号整数),也可以是数据类型 (yyyy-mm-dd hh:mm:ss.fff)。

四个季度的时间段如下:

Quarter Period (inclusive)
1 January 1 to March 31 (90 or 91 days)
2 April 1 to June 30 (91 days)
3 July 1 to September 30 (92 days)
4 October 1 to December 31 (92 days)

基于日期时间字符串的月份部分。但是,所有日期表达式都经过验证,并且必须包含 112 范围内的月份以及指定月份和年份的有效日期值。否则,将生成 错误 。 的时间部分可以省略,但如果存在则必须有效。

使用 或

0
0 163
文章 姚 鑫 · 四月 13, 2022 1m read

第111章 SQL函数 PREDICT

IntegratedML 函数,它应用指定的训练模型来预测提供的每个输入行的结果。

大纲

PREDICT(model-name )

PREDICT(model-name USE trained-model-name )

PREDICT(model-name WITH feature-columns-clause )

PREDICT(model-name USE trained-model-name WITH feature-columns-clause )

描述

PREDICT 是一个 IntegratedML 函数,可用作 选择项以返回将经过训练的机器学习模型应用于指定查询的结果。

0
0 119
文章 姚 鑫 · 四月 12, 2022 2m read

第110章 SQL函数 POWER

一个数值函数,它返回给定表达式的指定幂的值。

大纲

POWER(numeric-expression,power)

{fn POWER(numeric-expression,power)}

参数

  • numeric-expression - 基数。可以是正整数或负整数或小数。
  • power - 指数,它是数值表达式的幂。可以是正整数或负整数或小数。

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

描述

计算一个数字的另一个幂。它返回一个精度为 、比例为 18 的值。

请注意, 可以作为 ODBC 标量函数(使用大括号语法)或 SQL 通用标量函数来调用。

和 的所有组合都是有效的,除了:

  • POWER(0,-m)0 数字表达式和负幂会导致 SQLCODE -400 错误。
  • :负数值表达式和小数幂会导致 错误。

示例

以下示例将 5 提高到 次方:

以下嵌入式 SQL 示例返回 的前 次幂:

/// d ##class(PHA.TEST.SQLFunction).Power()
ClassMethod Power()
{
	s a = 1
	while a < 17 {
		&sql(
			SELECT {fn POWER(2, :a)}
				INTO :b
		)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"2 to the ",a," = ",b
		s a = a +1  }
	}
}

0
0 134
文章 姚 鑫 · 四月 11, 2022 2m read

第109章 SQL函数 POSITION

返回子字符串在字符串中的位置的字符串函数。

大纲

POSITION(substring IN string)

参数

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

POSITION返回数据类型。

描述

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

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

POSITION, INSTR, CHARINDEX和$FIND

、、CHARINDEX和都将搜索字符串中指定的子字符串,并返回与第一个匹配项对应的整数位置。 、和返回匹配子字符串的第一个字符的整数位置。 返回匹配子字符串结束后第一个字符的整数位置。 、和支持指定子字符串搜索的起始点。 还支持从起始点指定子字符串出现。

下面的示例演示了这四个函数,指定了所有可选参数。 注意,在这些函数中,和的位置不同:

SELECT POSITION('br' IN 'The broken brown briefcase') AS Position,
       CHARINDEX('br','The broken brown briefcase',6) AS Charindex,
       $FIND('The broken brown briefcase','br',6) AS Find,
       INSTR('The broken brown briefcase','br',6,2) AS Inst
       
5	12	14	18
0
0 158
文章 姚 鑫 · 四月 10, 2022 2m read

[toc]

第108章 SQL函数 %PLUS

将数字转换为规范排序格式的排序函数。

大纲

%PLUS(expression)

%PLUS expression

参数

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

描述

%PLUS将数字或数字字符串转换为规范形式,然后以数字排序顺序返回这些表达式值。

数字可以包含前导和后导零、多个前导加减号、单个小数点指示符(.)和指数指示符。 在标准形式中,将执行所有算术运算,展开指数,将符号解析为一个前导减号或无符号,并剥离前导和后导零。

可以使用或不使用封闭字符串分隔符来指定数字字面值。 如果字符串包含非数字字符,%PLUS将在第一个非数字字符处截断数字,并以规范形式返回数字部分。 非数字字符串(任何以非数字字符开头的字符串)返回为。 也返回为。

是一个SQL扩展,用于SQL查询查询。

可以使用 类的 Collation() 方法在 ObjectScript 中执行相同的排序规则转换:

  WRITE $SYSTEM.Util.Collation("++007.500",3)

将 与 排序规则进行比较,后者根据字符串中的数字子字符串对字符串进行排序。

示例

以下示例使用 按数字顺序返回 地址:

SELECT Name,Home_Street
FROM Sample.Person
ORDER BY %PLUS(Home_Street)
0
0 136
问题 Michael Lei · 四月 7, 2022

你好!

我想知道,如果在没有运行%BuildIndices()方法的情况下向表中插入索引,是否会有问题。

需要注意的是,在索引之前插入的数据对于检索来说并不重要,所以在索引之前插入的数据在查询中不显示并不是问题。

我问这个问题的原因是,我想避免在需要插入这种索引的大表中进行索引重建。

我正在使用Cache 2018.1。

谢谢。

José

Hi!

I'd like to know if there are any issues if an index is inserted into a table without running the %BuildIndices() method.

It's important to note that data inserted before the index is not important for retrieval, so it's not a problem data inserted before the index don't show up in queries.

The reason why I'm asking this is that I'd like to avoid index reconstruction on big tables which I need to inser such index.

2
0 267
文章 姚 鑫 · 四月 9, 2022 7m read

第107章 SQL函数 $PIECE

返回由分隔符标识的子字符串的字符串函数。

大纲

$PIECE(string-expression,delimiter[,from[,to]])

参数

  • string-expression - 要从中提取子字符串的目标字符串。 表达式,可以是字段名、字符串字面值、数字或其他函数的结果。
  • delimiter - 用于标识子字符串的分隔符。
  • from - 可选-指定要从目标字符串返回的子字符串或子字符串范围的开头的整数。 子字符串由分隔符分隔,从1开始计数。 如果省略,则返回第一个子字符串。
  • to - 可选-一个整数,指定从目标字符串返回的子字符串范围的结束子字符串。 必须与连用。

描述

从字符串表达式中返回指定的子字符串()。 返回的子字符串取决于所使用的参数:

  • $PIECE(string-expression,delimiter)返回中的第一个子字符串。 如果出现在字符串表达式中,则这是在第一次出现之前的子字符串。 如果分隔符没有出现在字符串表达式中,则返回的子字符串为字符串表达式。
  • 返回的第个片段的子字符串,其中整数由参数指定,片段由一个分隔符分隔。 分隔符不返回。
0
0 192
文章 姚 鑫 · 四月 8, 2022 1m read

第106章 SQL函数 PI

返回pi常数值的标量数值函数。

大纲

{fn PI()}
{fn PI}

描述

PI不接受参数。 它返回数学常数pi作为数据类型,精度为,刻度为。

只能使用标量函数(花括号)语法调用。 请注意,参数括号是可选的。

描述

下面的例子都返回的值:

SELECT {fn PI()} AS ExactPi

3.141592653589793238
SELECT {fn PI} AS ExactPi

3.141592653589793238
0
0 109
文章 姚 鑫 · 四月 7, 2022 1m read

第105章 SQL函数 %OID

返回 ID 字段的 OID 的标量函数。

大纲

%OID(id_field)

参数

  • id_field - ID 字段或引用字段的字段名称。

描述

%OID 采用字段名称并返回对象的完整 (对象 )。该字段必须是 字段或引用字段(外键字段)。在 中指定任何其他类型的字段会生成 错误。

示例

以下示例显示了与引用字段一起使用的 :

以下嵌入式 示例显示了与引用字段一起使用的 :

/// d ##class(PHA.TEST.SQLFunction).Oid()
ClassMethod Oid()
{
	&sql(SELECT Name, Spouse, %OID(Spouse)
			INTO :n,:s,:soid
		FROM Sample.Person)
	w !,"Name is:",n
	w !,"Spouse name is:",s
	w !,"Spouse OID is:",soid
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).Oid()
 
Name is:yaoxin
Spouse name is:13
Spouse OID is:13Sample.Person
0
0 108
文章 姚 鑫 · 四月 6, 2022 2m read

第104章 SQL函数 %ODBCOUT

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

大纲

%ODBCOUT(expression)

%ODBCOUT expression

参数

  • expression - 要转换的表达式。字段名称、包含字段名称的表达式或以可转换数据类型(例如 DATE%List)返回值的函数。不能是流字段。

描述

%ODBCOUT 在通过字段或数据类型的 方法传递值后以 格式返回表达式。 格式是可以通过 呈现数据的格式。当数据暴露给 时使用这种格式。可用的格式对应于 定义的格式。

通常用于 列表选择项。它可以在 WHERE 子句中使用,但不鼓励这种使用,因为使用 会阻止在指定字段上使用索引。

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

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

示例

以下示例显示了同一字段的默认显示格式、 和 格式。

SELECT FavoriteColors,%ODBCIN(FavoriteColors) AS InVal,
%ODBCOUT(FavoriteColors) AS OutVal
FROM Sample.Person
0
0 119
文章 姚 鑫 · 四月 5, 2022 1m read

第103章 SQL函数 %ODBCIN

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

大纲

%ODBCIN(expression)

%ODBCIN expression

参数

  • expression - 要转换的表达式。

描述

%ODBCIN 在通过字段或数据类型的 OdbcToLogical 方法传递值后以逻辑格式返回表达式。逻辑格式是数据的内存格式(执行操作的格式)。

是一个 扩展。

示例

以下示例显示了同一字段的默认显示格式、%ODBCIN 和 格式。

SELECT FavoriteColors,%ODBCIN(FavoriteColors) AS InVal,
%ODBCOUT(FavoriteColors) AS OutVal
FROM Sample.Person

image

以下示例在 WHERE 子句中使用 :

0
0 131
文章 姚 鑫 · 四月 4, 2022 2m read

第102章 SQL函数 %OBJECT

标量函数,它打开一个流对象并返回相应的 oref

大纲

%OBJECT(stream)

参数

  • stream - 作为流字段名称的表达式。

描述

%OBJECT 用于打开一个流对象并返回流字段的 (对象引用)。

流字段上的 返回流字段的完全形成的 (对象 ID)值。流字段上的 SELECT %OBJECT 返回流字段的 (对象引用)。这在以下示例中显示,其中 和 都是流字段:

/// d ##class(PHA.TEST.SQLFunction).Object()
ClassMethod Object()
{
	s myquery = "SELECT TOP 3 Title,Notes,%OBJECT(Picture) AS Photo FROM Sample.Employee"
	s tStatement = ##class(%SQL.Statement).%New()
	s qStatus = tStatement.%Prepare(myquery)
	s rset = tStatement.%Execute()
	while rset.%Next() {
		w "String field: ",rset.Title,!
		w "Stream field oid: ",rset.Notes,!
		w "Stream field oref: ",rset.Photo,!!
	}
	w !,"End of data"
}

0
0 145
文章 姚 鑫 · 四月 3, 2022 3m read

第101章 SQL函数 NVL

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

大纲

NVL(check-expression,replace-expression)

参数

  • check-expression - 要计算的表达式。
  • replace-expression - 如果 check-expressionNULL,则返回的表达式。

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

描述

计算检查表达式并返回以下两个值之一:

  • 如果 为 ,则返回 。
  • 如果 不为 ,则返回 check-expression

参数 和 可以具有任何数据类型。如果它们的数据类型不同,SQL 会将 转换为 的数据类型,然后再进行比较。返回值的数据类型始终与 的数据类型相同,除非 为字符数据,此时返回值的数据类型为 VARCHAR2。

请注意, 支持 兼容性,并且与 ISNULL 函数相同。

日期和时间显示转换

某些检查表达式数据类型需要从逻辑模式转换为 ODBC 模式或显示模式。例如 和 数据类型。如果的值不是同一个数据类型,这个值不能在ODBC模式或模式下转换,会产生错误:; - 用于 数据类型。例如,不能在 ODBC 模式或 模式下执行;它发出。要在 模式或显示模式下执行此语句,必须将值转换为适当的数据类型。这导致日期

0
0 139
文章 姚 鑫 · 四月 2, 2022 2m read

第100章 SQL函数 NULLIF

如果两个表达式具有相同的值,则返回 NULL 的函数。

大纲

NULLIF(expression1,expression2)

参数

  • expression1 - 表达式,可以是列名、数字或字符串文字、主变量或另一个标量函数的结果。
  • expression2 - 表达式,可以是列名、数字或字符串文字、主变量或另一个标量函数的结果。

返回与 相同的数据类型。

描述

如果 的值等于 的值,则 NULLIF 函数返回 。否则,它返回 值。

等价于:

SELECT CASE 
WHEN value1 = value2 THEN NULL
ELSE value1
END
FROM MyTable

NULL 处理函数比较

下表显示了各种 SQL 比较函数。如果逻辑比较测试为 ( 与 相同),则每个函数返回一个值,如果逻辑比较测试为 ( 与 不同),则返回另一个值。这些函数允许执行 逻辑比较。不能在实际相等(或不相等)条件比较中指定 。

SQL Function Comparison Test Return Value
0
0 112
文章 姚 鑫 · 四月 1, 2022 4m read

第九十九章 SQL函数 NOW

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

大纲

NOW()

{fn NOW}
{fn NOW()}

描述

NOW 不接受任何参数。参数括号对于 ODBC 标量语法是可选的;它们对于 SQL 标准函数语法是必需的。

以时间戳的形式返回该时区的当前本地日期和时间;它会根据本地时间变体进行调整,例如夏令时。

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

  1. 如果当前时间戳提供给数据类型为 %PosixTime 的字段,则当前时间戳值以 POSIXTIME 数据类型格式返回。例如, 或 。
  2. 如果当前时间戳提供给数据类型为 的字段,则当前时间戳值以 数据类型格式 () 返回。它的 ODBC 类型是 , 是 , 是 。小时以 小时格式表示。所有字段都保留前导零。例如, 或 。
  3. 如果在没有上下文的情况下提供当前时间戳,则以 数据类型格式返回当前时间戳值。例如。

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

可以使用 或 函数更改时间戳、日期和时间的数据类型。

精度的小数秒

默认情况下, 不返回小数秒的精度。它不支持精确参数。

0
0 124
文章 姚 鑫 · 三月 31, 2022 2m read

第九十八章 SQL函数 MONTHNAME

返回日期表达式的月份名称的日期函数。

大纲

{fn MONTHNAME(date-expression)}

参数

  • date-expression - 计算结果为 日期整数、ODBC 日期或时间戳的表达式。此表达式可以是列名、另一个标量函数的结果或日期或时间戳字面量。

描述

MONTHNAME 将日期整数、$HOROLOG 或 值、 格式日期字符串或时间戳作为输入。

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

时间戳的时间部分不被评估,可以省略。

MONTHNAME 返回相应日历月的名称,从一月到十二月。返回值是一个字符串,最大长度为 15。

检查提供的日期是否有效。年份必须介于 00019999(含)之间、月份 至 以及适合该月的日期(例如, 仅在闰年有效)。如果日期无效, 会发出 错误。

月份名称默认为全长美式英语月份名称。要更改这些月份名称值,请使用带有 选项的 命令。

使用 函数可以返回相同的月份名称信息。可以使用 检索月份名称或月份名称缩写与其他日期元素。要返回与月份对应的整数,请使用 或 。

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

$SYSTEM.SQL.Functions.MONTHNAME(date-expression)

示例

以下示例均返回字符串

0
0 76
文章 姚 鑫 · 三月 30, 2022 2m read

第九十七章 SQL函数 MONTH

日期函数,它将月份作为日期表达式的整数返回。

大纲

MONTH(date-expression)

{fn MONTH(date-expression)}

描述

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

描述

MONTH 返回一个指定月份的整数。月份整数是针对 日期整数、$HOROLOG 或 值、ODBC 格式日期字符串或时间戳计算的。

日期表达式时间戳可以是数据类型 (编码的 64 位有符号整数),也可以是数据类型 (yyyy-mm-dd hh:mm:ss.fff)。

日期字符串的月份 () 部分必须是 到 范围内的整数。前导零在输入时是可选的。输出时抑制前导零和尾随零。

的日期部分经过验证,并且必须包含 到 12 范围内的月份以及指定月份和年份的有效日期值。否则,将生成 错误 。

的时间部分未经验证,可以省略。

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

$SYSTEM.SQL.Functions.MONTH(date-expression)

可以使用以下 SQL 函数返回日期时间字符串的元素:、MONTH、(或 )、、 和 。使用 或 函数可以返回相同的元素。可以使用 返回日期元素。

0
0 95
文章 姚 鑫 · 三月 29, 2022 2m read

第九十六章 SQL函数 MOD

注:IRIS可用,非IRIS版本不可用。

标量数值函数,返回一个数除以另一个数的模数(余数)。

大纲

MOD(dividend,divisor)

{fn MOD(dividend,divisor)}

参数

  • dividend - 数字,它是除法的分子(除数)。
  • divisor - 数字,它是除法的分母(除数)。

MOD 返回 数据类型,除非被除数是数据类型 。如果 为 ,则 返回 。

描述

返回除数除数的数学余数(模数)。

可以指定为标准标量函数或带有大括号语法的 ODBC 标量函数。

  • 如果被除数和除数为正数,则返回正数模数或零。
  • 如果被除数和除数都是负数,则返回负模数或零。
  • 如果被除数或除数为 NULL,则返回 NULL
  • 如果除数为 ,它将生成带有 错误的 。
  • 如果除数大于被除数,则返回被除数。

(任一语法形式)报告的精度与算术表达式除数/除数的精度报告相同。

ANSI 运算符优先级

具有单个负操作数的 函数的行为取决于 配置设置:

  • 如果未应用 ,则带有负操作数的 MOD 的行为与 模运算符相同。两者都返回短计数(达到下一个倍数所需的数量),而不是模数。例如, 返回模数 ; 返回短计数 。如果被除数为负,短计数为正值或零。如果除数为负,则短计数为负值或零。
  • 如果应用了 (IRIS 2019.1 及后续版本的默认设置),带有负操作数的
0
0 149
文章 姚 鑫 · 三月 28, 2022 3m read

第九十五章 SQL函数 MINUTE

返回日期时间表达式的分钟的时间函数。

大纲

{fn MINUTE(time-expression)}

参数

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

描述

MINUTE 返回一个整数,指定给定时间或日期时间值的分钟数。为 $HOROLOG 或 值、ODBC 格式日期字符串或时间戳计算分钟。

时间表达式时间戳可以是数据类型 (编码的 64 位有符号整数),也可以是数据类型 (yyyy-mm-dd hh:mm:ss.fff)。

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

请注意,可以提供时间整数(经过的秒数),但不能提供时间字符串 ()。必须提供日期时间字符串 ()。

日期时间字符串的时间部分必须是有效时间。否则,将生成 SQLCODE -400 错误 。分钟 () 部分必须是 到 范围内的整数。前导零在输入时是可选的;前导零在输出上被抑制。可以省略日期时间字符串的秒 () 部分,但仍返回分钟部分。

日期时间字符串的日期部分未经过验证。

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

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

0
0 113
文章 姚 鑫 · 三月 27, 2022 2m read

第九十四章 SQL函数 %MINUS

将数字转换为规范整理格式,然后反转符号的整理函数。

大纲

%MINUS(expression)

%MINUS expression

参数

  • expression - 表达式,可以是列名、数字或字符串文字、算术表达式或另一个函数的结果,其中基础数据类型可以表示为任何字符类型。

描述

%MINUS 将数字或数字字符串转换为规范形式,反转符号,然后以数字排序规则返回这些表达式值。

%MINUS 和 在功能上是相同的,只是 %MINUS 反转了符号。它为解析为正数的任何数字添加减号前缀,并从解析为负数的任何数字中删除减号。零从不签名。

一个数字可以包含前导零和尾随零、多个前导加号和减号、一个小数点指示符 () 和 指数指示符。在规范形式中,执行所有算术运算,扩展指数,将符号解析为单个前导减号或无符号,并去除前导零和尾随零。

可以使用或不使用封闭字符串分隔符来指定数字文字。如果字符串包含非数字字符, 会在第一个非数字字符处截断数字,并以规范形式返回数字部分。非数字字符串(任何以非数字字符开头的字符串)返回为 。%MINUS 也将 作为 返回。

是一个 SQL 扩展,用于 SQL 查找查询。

可以使用 类的 Collation()

0
0 106
文章 姚 鑫 · 三月 26, 2022 2m read

第九十三章 SQL函数 LTRIM

字符串函数,它返回一个删除了前导空格的字符串。

大纲

LTRIM(string-expression)

{fn LTRIM(string-expression)}

参数

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

描述

LTRIM 从字符串表达式中删除前导空格,并将字符串作为 VARCHAR 类型返回。如果 为 ,则 返回 。如果 是一个完全由空格组成的字符串,则 返回空字符串 。

留下尾随空格;要删除尾随空格,请使用 。要删除任何类型的前导和/或尾随字符,请使用 TRIM。要使用前导空格或其他字符填充字符串,请使用 。要创建一串空白,请使用 。

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

示例

以下嵌入式 SQL 示例从字符串中删除了五个前导空格。它留下五个尾随空白:

ClassMethod Ltrim()
{
	s a = "     Test string with 5 leading and 5 trailing spaces.     "
	&sql(
		SELECT {fn LTRIM(:a)} INTO :b
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"Before LTRIM",!,"start:",a,":end"
		w !,"After LTRIM",!,"start:",b,":end" 
	}
}
0
0 90
文章 姚 鑫 · 三月 25, 2022 2m read

[toc]

第九十二章 SQL函数 LPAD

字符串函数,它返回一个左填充到指定长度的字符串。

大纲

LPAD(string-expression,length[,padstring])

参数

  • string-expression - 字符串表达式,可以是列名、字符串文字、主机变量或另一个标量函数的结果。可以是可转换为 VARCHAR 数据类型的任何数据类型。字符串表达式不能是流。
  • length - 一个整数,指定返回的字符串中的字符数。
  • - 可选 — 由一个字符或一串字符组成的字符串,用于填充输入字符串表达式。 padstring 字符或字符附加到 string-expression 的左侧,以提供创建长度字符的输出字符串所需的尽可能多的字符。 可以是字符串文字、列、主机变量或另一个标量函数的结果。如果省略,则默认为空格字符。

描述

用前导填充字符填充字符串表达式。它返回填充到长度字符数的字符串的副本。如果字符串表达式的长度超过 个字符,则返回字符串被截断为 个字符。

如果 为 ,则 LPAD 返回 。如果 是空字符串 返回一个完全由填充字符组成的字符串。返回的字符串是 类型。

可用于针对链接表的查询。

不会删除前导或尾随空格;它填充字符串,包括任何前导或尾随空格。要在填充字符串之前删除前导或尾随空格,请使用 LTRIM、 或 。

0
0 138
文章 姚 鑫 · 三月 24, 2022 2m read

第九十一章 SQL函数 LOWER

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

大纲

LOWER(string-expression)

参数

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

描述

LOWER 函数将大写字母转换为小写字母以供显示。这是 UPPER 函数的逆函数。 LOWER 对非字母字符没有影响。它保留不变的标点符号、数字以及前导和尾随空格。

不强制将数字解释为字符串。 SQL 将数字转换为规范形式,删除前导零和尾随零。指定为字符串的数字不会转换为规范形式,并保留前导零和尾随零。

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

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

示例

以下示例以小写字母返回每个人的姓名:

SELECT Name,LOWER(Name) AS LowName
     FROM Sample.Person

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

/// d ##class(PHA.TEST.SQLFunction).Lower()
ClassMethod Lower()
{
	s a = $c(920, 913, 923, 913, 931, 931, 913)
	&sql(
		SELECT LOWER(:a)
			INTO :b
		FROM Sample.Person
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,a,!,b 
	}
}
0
0 120
文章 姚 鑫 · 三月 23, 2022 1m read

第九十章 SQL函数 LOG10

标量数值函数,它返回给定数值表达式的以 10 为底的对数。

大纲

{fn LOG10(expression)}

参数

  • expression - 数值表达式。

LOG10 返回 NUMERIC 或 数据类型。如果表达式为 数据类型,则 返回 ;否则,它返回 。

描述

返回表达式的以 为底的对数值。LOG10 返回一个精度为 、小数位数为 的值。

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

示例

以下示例返回整数的以 为底的对数:

SELECT {fn LOG10(5)} AS Log10

0.698970004336018805

以下嵌入式 SQL 示例返回整数 110 的以 为底的对数值:

/// d ##class(PHA.TEST.SQLFunction).Log10()
ClassMethod Log10()
{
	s a = 1
	while a < 11 {
		&sql(
			SELECT {fn LOG10(:a)} INTO :b
		)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE
			q 
		} else {
			w !,"Log-10 of ",a," = ",b
			s a = a + 1 
		}
	}
}
0
0 91
文章 姚 鑫 · 三月 22, 2022 2m read

第八十九章 SQL函数 LOG

返回给定数值表达式的自然对数的标量数值函数。

大纲

{fn LOG(expression)}

参数

  • expression - 数值表达式。

LOG 返回 NUMERIC 或 数据类型。如果表达式为 数据类型,则 返回 ;否则,它返回 。

描述

返回表达式的自然对数(以 为底)。 LOG 返回一个精度为 、小数位数为 的值。

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

示例

以下示例返回整数的自然对数:

SELECT {fn LOG(5)} AS Logarithm

1.609437912434100375

以下嵌入式 SQL 示例显示了整数 1 到 的 和 函数之间的关系:

请注意,此处需要 函数来纠正由系统计算限制引起的非常小的差异。在上面的示例中, 被任意设置为 12 位十进制数字。

/// d ##class(PHA.TEST.SQLFunction).Log()
ClassMethod Log()
{
	s a = 1
	while a < 11 {
		&sql(
			SELECT {fn LOG(:a)} INTO :b
		)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE 
			q 
		} else {
			w !,"Logarithm of ",a," = ",b 
		}
		&sql(
			SELECT ROUND({fn EXP(:b)},12) INTO :c
		)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE
			q 
		} else {
			w !,"Exponential of log ",b," = ",c
			s a = a + 1 
		}
	}
}
0
0 140
文章 姚 鑫 · 三月 21, 2022 3m read

第八十八章 SQL函数 $LISTTOSTRING

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

大纲

$LISTTOSTRING(list[,delimiter])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。可以使用 SQL 或 ObjectScript 函数从现有列表中提取列表。
  • - 可选 — 插入以分隔子字符串的分隔符。分隔符可以是一个或多个字符,指定为带引号的字符串。要连接不带分隔符的子字符串,请指定空字符串 。如果不指定分隔符,则默认为逗号 (,) 字符。

描述

$LISTTOSTRING 采用 列表并将其转换为字符串。在结果字符串中,列表的元素由分隔符分隔。

列表以不使用分隔符的编码格式表示数据。因此,列表可以包含所有可能的字符,并且非常适合位串数据。 将此列表转换为带有分隔元素的字符串。它留出一个指定的字符(或字符串)作为分隔符。可以使用 函数处理这些分隔元素。

注意:此处指定的分隔符不得出现在源数据中。 不区分用作分隔符的字符和用作数据字符的相同字符。

可以使用 $LISTTOSTRING 从串行容器字段中检索字段值作为分隔字符串。在以下示例中, 是一个串行容器字段。它包含列表元素 Home_Street

0
0 165
文章 姚 鑫 · 三月 20, 2022 4m read

第八十七章 SQL函数 $LISTSAME

比较两个列表并返回布尔值的列表函数。

大纲

$LISTSAME(list1,list2)

参数

  • list1 - 计算结果为有效列表的表达式。
  • list2 - 计算结果为有效列表的表达式。

描述

$LISTSAME 比较两个列表的内容,如果列表相同则返回 。如果列表不相同,则 返回 。 逐个元素地比较两个列表。对于两个相同的列表,它们必须包含相同数量的元素,并且 中的每个元素必须与 中的相应元素匹配。

使用它们的字符串表示来比较列表元素。 比较区分大小写。 $LISTSAME 按从左到右的顺序逐个元素地比较两个列表。因此, 在遇到第一个不匹配的列表元素对时返回值 ;它不检查后续项目以确定它们是否是有效的列表元素。

此函数返回 类型的数据。

参数

list (list1 and list2)

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

以下是有效列表的示例:

  • $LISTBUILD('a','b','c'):一个三元素列表。
  • $LISTBUILD('a','','c')
0
0 107
文章 姚 鑫 · 三月 19, 2022 4m read

第八十六章 SQL函数 $LISTLENGTH

返回指定列表中元素数量的列表函数。

大纲

$LISTLENGTH(list)

参数

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

描述

$LISTLENGTH 返回列表中元素的数量。

此函数返回 SMALLINT 类型的数据。

示例

以下嵌入式 SQL 示例返回 ,因为列表中有 3 个元素:

/// d ##class(PHA.TEST.SQLFunction).ListLength()
ClassMethod ListLength()
{
	s a = $lb("Red", "Blue", "Green")
	&sql(
		SELECT $LISTLENGTH(:a) INTO :b
	)
	if SQLCODE '= 0 {
		w !,"Error code;",SQLCODE 
	} else {
		w !,"The number of elements is ",b 
	}
}
DHC-APP> d ##class(PHA.TEST.SQLFunction).ListLength()
 
The number of elements is 3
0
0 120
文章 姚 鑫 · 三月 18, 2022 5m read

第八十五章 SQL函数 $LISTGET

返回列表中的元素或指定默认值的列表函数。

大纲

$LISTGET(list[,position[,default]])

参数

  • list - 计算结果为有效列表的表达式。列表是包含一个或多个元素的编码字符串。可以使用 SQL 或 ObjectScript 的 $LISTBUILD$LISTFROMSTRING 函数创建列表。可以使用 SQL 或 ObjectScript 函数从现有列表中提取列表。
  • - 可选 — 解释为指定列表中的位置的表达式。
  • - 可选 — 如果列表元素具有未定义的值,则该表达式提供要返回的值。

描述

将指定列表中的请求元素作为标准字符串返回。如果位置参数的值引用不存在的成员或标识具有未定义值的元素,则返回指定的默认值。

函数与 函数的单参数和双参数形式相同,只是在导致 $LIST 返回空字符串的条件下, 返回默认值。

此函数返回 类型的数据。

可以使用 从串行容器字段中检索字段值。在以下示例中, 是一个串行容器字段,其第三个元素是 Home_State

SELECT Name,$LISTGET(Home,3) AS HomeState
FROM Sample.Person

参数

list

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

0
0 109