1 关注者 · 494 帖子

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

文章 姚 鑫 · 五月 14, 2022 4m read

第142章 SQL函数 TO_CHAR(三)

数字到字符串示例

以下嵌入式 SQL 示例显示了基本的数字到字符串的转换:

/// d ##class(PHA.TEST.SQLFunction).ToChar3()
ClassMethod ToChar3()
{
	&sql(
		SELECT 
			TO_CHAR(1000,'9999'),
			TO_CHAR(10,'9999')
		INTO 
			:numfull,:numshort
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"Formatted number:",numfull
		w !,"Formatted number:",numshort
		w !,"Note leading blanks" 
	}
}
DHC-APP>d ##class(PHA.TEST.SQLFunction).ToChar3()
 
Formatted number: 1000
Formatted number:   10
Note leading blank

返回具有适当数量的前导空格的指定数字。无符号正数前面总是有一个空白字符。如果指定数字的位数少于格式参数,则提供额外的前导空格。

0
0 116
文章 姚 鑫 · 五月 13, 2022 5m read

第141章 SQL函数 TO_CHAR(二)

可以使用 TO_CHAR 将以下 tochar 表达式时间值转换为格式化的时间字符串:

  • $HOROLOG 时间整数($HOROLOG 的时间部分)。 tochar-expression 的值必须是有效的逻辑时间( 到 范围内的整数)。不要提供包含日期和时间组件的完整 值(例如 ); 时间转换会错误地将 的第一个(日期)组件转换为格式化的时间字符串,并忽略第二个(时间)组件。
  • 逻辑时间戳值。 的值必须是 数据类型(不是字符串数据类型),格式为 。时间戳的日期部分被忽略,时间部分被转换。例如, 是一个逻辑时间戳。
  • 标准 ODBC 时间格式的时间值。 的值必须采用 格式,并且可以是字符串。
  • 本地时间格式的时间值(使用当前 NLS 区域设置)。例如,如果 NLS TimeSeparator 设置为,则 的值可以采用 格式,并且可以是字符串。

在所有这些情况下,格式的值必须是一个只包含时间格式代码的字符串:

Format Code Meaning
HH 一天中的小时(1 到 12)
HH12 一天中的小时(1 到 12)
HH24 小时(0 到 23)
MI 分钟(0 到 59)
SS
0
0 224
文章 姚 鑫 · 五月 12, 2022 9m read

第140章 SQL函数 TO_CHAR(一)

将日期、时间戳或数字转换为格式化字符串的字符串函数。

大纲

TO_CHAR(tochar-expression[,format])

TOCHAR(tochar-expression[,format])

参数

  • tochar-expression - 要转换的逻辑日期、时间戳或数字表达式。
  • format - 可选 — 为 tochar 表达式转换指定日期、时间戳或数字格式的字符代码。如果省略,TO_CHAR 将 作为规范数字返回。

描述

名称 TO_CHAR 和 是可互换的,并且支持 Oracle 兼容性。

带格式的 TO_CHAR 函数有五种用途:

  • 将日期整数转换为格式化的日期字符串。

  • 日期在1840年之前转换为朱利安日期int

  • 时间的整数转换为格式化时间生态

  • 将日期和时间格式化的datetime

  • 将数字转换成一个格式化的数字字符串。

这个函数也可以从调用

$SYSTEM.SQL.Functions.TOCHAR(tochar-expression,format)
0
0 439
文章 姚 鑫 · 五月 11, 2022 3m read

第139章 SQL函数 TIMESTAMPDIFF

一个标量日期/时间函数,它返回指定日期部分的两个时间戳之间差异的整数计数。

大纲

{fn TIMESTAMPDIFF(interval-type,startdate,enddate)}

参数

  • interval-type - 返回值将表示的时间/日期间隔类型。
  • startdate - 时间戳值表达式。
  • enddate - 将与 startdate 进行比较的时间戳值表达式。

描述

函数返回指定日期部分间隔(秒、天、周等)的两个给定时间戳之间的差异(即,从另一个中减去一个时间戳)。返回的值是一个 ,即两个时间戳之间的这些间隔数。 (如果 早于 ,则 返回负 值。)

开始日期和结束日期是时间戳。这些时间戳可以是 数据类型格式 () 或 %Library.PosixTime 数据类型格式(编码的 位有符号整数)。

间隔类型参数可以是以下时间戳间隔之一:

  • SQL_TSI_FRAC_SECOND

  • SQL_TSI_SECOND

  • SQL_TSI_MINUTE

0
0 185
文章 姚 鑫 · 五月 10, 2022 4m read

第138章 SQL函数 TIMESTAMPADD

一个标量日期/时间函数,它返回一个新的时间戳,该时间戳是通过将指定日期部分的多个间隔添加到时间戳来计算的。

大纲

{fn TIMESTAMPADD(interval-type,integer-exp,timestamp-exp)}

参数

  • interval-type - integer-exp 表示的时间/日期间隔类型,指定为关键字。
  • integer-exp - 要添加到 的整数值表达式。
  • timestamp-exp - 时间戳值表达式,将增加 的值。

描述

函数通过将指定的日期部分增加指定的单位数来修改日期/时间表达式。例如,如果 是 并且 是 ,则 将 增加五个月。还可以通过为 指定负整数来减少日期部分。

返回与输入 数据类型相同的时间戳。此时间戳可以是 %Library.TimeStamp 数据类型格式 () 或 数据类型格式(编码的 位有符号整数)。

请注意, 只能用作 标量函数(使用大括号语法)。

可以使用 通用函数对时间戳执行类似的时间/日期修改操作。

Interval Types

间隔类型参数可以是以下时间戳间隔之一:

  • SQL_TSI_FRAC_SECOND
  • SQL_TSI_MINUTE

这些时间戳间隔可以使用单引号或双引号来指定,带或不带引号。它们不区分大小写。

0
0 355
文章 姚 鑫 · 五月 9, 2022 1m read

第137章 SQL函数 TAN

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

大纲

{fn TAN(numeric-expression)}

参数

  • numeric-expression - 一个数值表达式。这是一个以弧度表示的角度。

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

描述

接受任何数值并返回其切线。如果传递 值,TAN 返回 。 将非数字字符串视为数值 。

返回一个精度为 、比例为 18 的值。

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

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

示例

以下示例显示了 TAN 的效果。

SELECT {fn TAN(0.52)} AS Tangent 


0.572561830251668415
0
0 152
文章 姚 鑫 · 五月 8, 2022 4m read

第136章 SQL函数 SUBSTRING

字符串函数,它从任何数据类型的数据(包括流数据)中返回一个子字符串。

大纲

SUBSTRING(string-expression,start[,length])

SUBSTRING(string-expression FROM start [FOR length])

{fn SUBSTRING(string-expression,start[,length])}

参数

  • string-expression - 要从中派生子字符串的字符串表达式。表达式,可以是列名、字符串文字或另一个标量函数的结果。字段可以是任何数据类型:字符串(例如 CHARVARCHAR)、数字或数据类型为 或 的数据流字段。
  • - 一个整数,它指定 中开始子字符串的位置。 string-expression 中的第一个字符位于位置 。如果起始位置高于字符串的长度,则 返回一个空字符串 。如果起始位置小于 (零或负数),则子字符串从位置 开始,但子字符串的长度会减少起始位置。
  • - 可选 — 一个整数,指定要返回的子字符串的长度。如果未指定长度,则默认返回字符串的其余部分。

描述

接受任何数据类型的数据并将该数据的子字符串作为数据类型 返回。当然,子字符串可以是作为字符串返回的完整数据值。

的值控制子字符串的起点:

  • 如果 为 1
0
0 213
文章 姚 鑫 · 五月 7, 2022 2m read

第135章 SQL函数 SUBSTR

返回从指定字符串表达式派生的子字符串的字符串函数。

大纲

SUBSTR(string-expression,start[,length])

参数

  • string-expression - 要从中派生子字符串的字符串表达式。表达式可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。
  • - 一个整数,它指定子字符串在字符串表达式中的开始位置。正的起始位置指定从字符串开头开始的字符数。 中的第一个字符位于位置 1。负起始位置指定从字符串末尾算起的字符数。如果 为 (零),则将其视为 。
  • - 可选 — 一个正整数,指定要返回的子字符串的长度。此值指定子字符串在起始位置右侧结束长度字符。如果省略,则子字符串从字符串表达式的开头到结尾。如果长度为 或负数, 返回 NULL

描述

因为 可以是负数,所以可以从原始字符串的开头或结尾获取子字符串。

作为参数传递给 的浮点数通过截断小数部分转换为整数。

  • 如果 为 、–0 或 ,则返回的子字符串从字符串的第一个字符开始。
  • 如果 是负数,则返回的子字符串从字符串末尾开始该数量的字符, 表示字符串的最后一个字符。如果负数太大以至于从字符串末尾向后计数的值将位于字符串开头之前,则返回的子字符串从字符串的第一个字符开始。
  • 如果 start
0
0 155
文章 姚 鑫 · 五月 6, 2022 2m read

第134章 SQL函数 STUFF

字符串函数,用于替换字符串中的子字符串。

大纲

STUFF(string,start,length,substring)

参数

  • string - 作为子字符串替换目标的字符串表达式。
  • start - 替换的起点,指定为正整数。从字符串开头开始的字符数,从 1 开始计数。允许的值为 0 到字符串的长度。要追加字符,请指定 的开头和 的长度。空字符串或非数字值被视为 。
  • - 要替换的字符数,指定为正整数。要插入字符,请将长度指定为 。要在开始后替换所有字符,请指定大于现有字符数的长度。空字符串或非数字值被视为 0
  • - 一个字符串表达式,用于替换由其起始点和长度标识的子字符串。可以比它替换的子字符串更长或更短。可以是空字符串。

描述

用另一个子字符串替换一个子字符串。它标识要替换为位置和长度的子字符串,并将其替换为子字符串。

此函数提供与 实现的兼容性。

替换子字符串可能比原始值长或短。要删除原始值,子字符串可以是空字符串 ()。

起始值必须在字符串的当前长度范围内。您可以通过指定起始值 0 将子字符串附加到字符串的开头。空字符串或非数字值被视为 。

start、 或 参数指定 将返回 。

不能将 字段用于字符串或子字符串参数。尝试这样做会生成 SQLCODE -37 错误。

REPLACE 和 STUFF

和 都执行子字符串替换。

0
0 162
文章 姚 鑫 · 五月 5, 2022 3m read

第133章 SQL函数 STRING

将表达式转换并连接成字符串的函数。

大纲

STRING(string1[,string2][,...][,stringN])

参数

  • string - 表达式,可以是字段名称、字符串文字、数字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。如果指定了字段名称,则使用逻辑值。

描述

STRING 将一个或多个字符串转换为 STRING 格式,然后将这些字符串连接成一个字符串。不执行大小写转换。

在字符串转换之前将数字转换为其规范形式。因此,它执行算术运算,从数字中删除前导和尾随零以及前导加号。

如果字符串参数之一为 ,则 STRING 返回 。如果字符串参数之一是空字符串 (),则 将连接其他参数。 保留空格。

可以使用 函数转换数据值以进行区分大小写的字符串比较,或使用 函数转换数据值以进行不区分大小写的字符串比较。

示例

在以下嵌入式 SQL 示例中,STRING 将三个子字符串连接成一个字符串。该示例显示了空格、空字符串和 的处理:

/// d ##class(PHA.TEST.SQLFunction).String()
ClassMethod String()
{
	&sql(
		SELECT STRING('a','b','c'),
			STRING('a',' ','c'),
			STRING('a','','c'),
			STRING('a',NULL,'c')
		INTO :w,:x,:y,:z
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"Resulting string is:",w
		w !,"Resulting string is:",x
		w !,"Resulting string is:",y
		w !,"Resulting string is:",z 
	}
}
0
0 203
文章 姚 鑫 · 五月 4, 2022 2m read

第132章 SQL函数 STR

将数字转换为字符串的函数。

大纲

STR(number[,length[,decimals]])

参数

  • number - 解析为数字的表达式。它可以是字段名称、数字或其他函数的结果。如果指定了字段名称,则使用逻辑值。
  • length - 可选 — 一个整数,指定所需输出字符串的总长度,包括所有字符(数字、小数点、符号、空格)。默认值为 10
  • decimals - 可选 — 一个整数,指定要包含的小数点右侧的位数。默认值为 0。

描述

将数字转换为 格式,根据长度和小数的值截断数字。长度参数必须足够大以包含数字的整个整数部分,并且,如果指定小数,则该小数位数加 (用于小数点)。如果长度不够大,则 将返回一个星号 () 字符串,该字符串等于长度。

在字符串转换之前将数字转换为其规范形式。因此,它执行算术运算,从数字中删除前导和尾随零以及前导加号。

如果 参数为 NULL,则 返回 。如果 参数是空字符串 (),则 返回空字符串。 保留空格。

示例

在以下嵌入式 示例中, 将数字转换为字符串:

/// d ##class(PHA.TEST.SQLFunction).Str()
ClassMethod Str()
{
	&sql(
		SELECT STR(123),
			STR(123,4),
			STR(+00123.45,3),
			STR(+00123.45,3,1),
			STR(+00123.45,5,1)
		INTO :v,:w,:x,:y,:z
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"Resulting STR:",v," string"
		w !,"Resulting STR:",w," string"
		w !,"Resulting STR:",x," string"
		w !,"Resulting STR:",y," string"
		w !,"Resulting STR:",z," string" 
	}
}
0
0 142
文章 姚 鑫 · 五月 3, 2022 1m read

第131章 SQL函数 SQUARE

返回数字平方的标量数值函数。

大纲

SQUARE(numeric-expression)

参数

  • numeric-expression - 解析为数值的表达式。

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

描述

返回数值表达式的平方。如果传递 值,SQUARE 返回 。

返回的精度和小数位数与 乘法运算符返回的相同。

示例

以下嵌入式 SQL 示例返回整数 到 10 的平方:

/// d ##class(PHA.TEST.SQLFunction).Square()
ClassMethod Square()
{
	s a = 0
	while a < 11 {
		&sql(
			SELECT SQUARE(:a) INTO :b
		)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE 
		} else {
			w !,"The square of ",a," = ",b
			s a = a + 1 
		}
	}
}

DHC-APP>d ##class(PHA.TEST.SQLFunction).Square()
 
The square of 0 = 0
The square of 1 = 1
The square of 2 = 4
The square of 3 = 9
The square of 4 = 16
The square of 5 = 25
The square of 6 = 36
The square of 7 = 49
The square of 8 = 64
The square of 9 = 81
The square of 10 = 100
0
0 130
文章 姚 鑫 · 五月 2, 2022 2m read

第130章 SQL函数 SQRT

返回给定数值表达式的平方根的数值函数。

大纲

SQRT(numeric-expression)

{fn SQRT(numeric-expression)}

参数

  • numeric-expression - 解析为计算平方根的正数的表达式。

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

描述

返回 的平方根。 numeric-expression 必须是正数。负数值表达式( 除外)会生成 错误。如果传递 值, 返回 。

返回一个精度为 、小数位数为 18 的值。

可以指定为常规标量函数或 标量函数(使用大括号语法)。

示例

以下示例显示了两种 语法形式。两者都返回 的平方根:

SELECT SQRT(49) AS SRoot,{fn SQRT(49)} AS ODBCSRoot

7	7

以下嵌入式 示例返回整数 到 的平方根:

/// d ##class(PHA.TEST.SQLFunction).Sort()
ClassMethod Sort()
{
	s a = 0
	while a < 11 {
		&sql(
			SELECT SQRT(:a) INTO :b
		)
		if SQLCODE '= 0 {
			w !,"Error code ",SQLCODE 
		} else {
			w !,"The square root of ",a," = ",b
			s a = a + 1 
		}
	}
}
0
0 132
文章 姚 鑫 · 五月 1, 2022 4m read

第129章 SQL函数 %SQLUPPER

将值排序为大写字符串的排序规则函数。

大纲

%SQLUPPER(expression[,maxlen]) 

%SQLUPPER expression

参数

  • expression - 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。表达式可以是子查询。
  • - 可选 — 一个整数,指定整理后的值将被截断为 的值。请注意, maxlen 包括附加的前导空格。您可以用双括号将 括起来以抑制文字替换:(())。

描述

SQLUPPER 是默认排序规则。

将表达式转换为排序为(不区分大小写)大写字符串的格式。 将所有字母字符转换为大写,从字符串中去除尾随空格(空格、制表符等),然后在字符串开头添加一个前导空格。这个附加的空格会导致 NULL 和数值被整理为字符串。

在将数字传递给函数之前将数值转换为规范形式(删除前导零和尾随零、扩展指数等)。 不会将数字字符串转换为规范形式。

因为 %SQLUPPER 将空格附加到所有值,所以它将 值作为空格进行整理,字符串长度为 1。 将任何仅包含空格(空格、制表符等)的值整理为 SQL 空字符串 ()。当

0
0 152
文章 姚 鑫 · 四月 30, 2022 4m read

第128章 SQL函数 %SQLSTRING

将值排序为字符串的排序规则函数。

大纲

%SQLSTRING(expression[,maxlen])

%SQLSTRING expression

参数

  • expression - 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。表达式可以是子查询。
  • - 可选 — 一个正整数,指定整理后的值将被截断为 的值。请注意, maxlen 包括附加的前导空格。可以用双括号将 括起来以抑制文字替换:(())。

描述

%SQLSTRING 将表达式转换为按(区分大小写)字符串排序的格式。 从字符串中去除尾随空格(空格、制表符等),然后在字符串的开头添加一个前导空格。这个附加的空格强制将 NULL 和数值作为字符串进行整理。从数字中删除前导零和尾随零。

因为 将空格附加到所有值,所以它将 值整理为空格,字符串长度为 1。 将任何仅包含空格(空格、制表符等)的值整理为 SQL 空字符串()。当 将空格附加到空(零长度)字符串时,它会将空格加上空字符串的内部表示形式 进行整理,从而导致字符串长度为 。

可选的 参数在索引或整理时将表达式字符串截断为指定的字符数。例如,如果插入带有 截断的字符串,则插入完整的字符串,并且可以通过

0
0 128
文章 姚 鑫 · 四月 29, 2022 1m read

第127章 SQL函数 SPACE

返回一串空格的字符串函数。

大纲

SPACE(count)

{fn SPACE(count)}

参数

  • count - 整数表达式,指定要返回的空格数。

描述

SPACE 返回一个空格字符串 count 个空格长。如果 是数字字符串、十进制数或混合数字字符串, 会将其解析为其整数部分。如果 是负数或非数字字符串将其解析为 。

要从字符串中删除空格,请使用 (前导空格)或 (尾随空格)。

注意:不应将 SPACE 函数与 归类类型混淆。 排序规则在一个值前面添加一个空格,强制将其作为字符串进行评估。为了建立 归类, 提供了一个 归类关键字,ObjectScript 提供了 类的 方法。

示例

以下嵌入式 SQL 示例返回名称字段长度的空格字符串:

/// d ##class(PHA.TEST.SQLFunction).Space()
ClassMethod Space()
{
	&sql(
		SELECT SPACE(LENGTH(name))
			INTO :a
		FROM Sample.Person
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"Leave this much space:",a,"for names" 
	}
}
0
0 102
文章 姚 鑫 · 四月 28, 2022 1m read

第126章 SQL函数 SIN

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

大纲

{fn SIN(numeric-expression)}

参数

  • numeric-expression - 数值表达式。这是一个以弧度表示的角度。

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

描述

接受任何数值并将其正弦作为浮点数返回。如果传递一个 值,SIN 返回 。 将非数字字符串视为数值 。

返回一个精度为 、小数位数为 18 的值。

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

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

示例

以下示例显示了 SIN 的效果:

SELECT {fn SIN(0.52)} AS Sine

0.496880137843736714
0
0 97
文章 姚 鑫 · 四月 27, 2022 1m read

第125章 SQL函数 SIGN

返回给定数值表达式符号的数值函数。

大纲

SIGN(numeric-expression)

{fn SIGN(numeric-expression)}

参数

  • numeric-expression - 要为其返回符号的数字。

SIGN 返回 SMALLINT 数据类型。

描述

返回以下内容:

  • -1 如果 numeric-expression 小于零。
  • 如果 numeric-expression 为零,则为 (零):0、 或 。
  • 如果 大于零,则为 。
  • 如果 为 ,或者它是非数字字符串,则为 。

可用作 标量函数(使用花括号语法)或 SQL 通用函数。

在确定其值之前将数值表达式转换为规范形式。例如, 和 都返回 ,表示一个正数。

注意:两个负号(连字符)是内嵌注释指示符。因此,指定两个连续负号的 参数必须显示为用引号括起来的数字字符串。

示例

以下示例显示了 的效果:

SELECT {fn SIGN(-0.0)} AS PosNeg

0
SELECT SIGN(-+-16.748) AS PosNeg

1
0
0 132
文章 姚 鑫 · 四月 26, 2022 4m read

第124章 SQL函数 SECOND

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

大纲

{fn SECOND(time-expression)}

参数

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

描述

SECOND 返回一个从 0 到 的整数,也可能返回小数秒。秒数是针对 或 值、 格式日期字符串(没有时间值)或时间戳计算的。

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

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

必须提供时间戳字符串 () 或 字符串。 $HOROLOG 字符串可以是完整的日期时间字符串 () 或只是 的时间整数部分。不能提供时间字符串 ();无论实际秒数如何,这始终返回 。

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

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

当秒部分为或时, 返回 秒。如果提供了没有时间表达式的 ODBC 日期,或者完全省略了时间表达式的秒部分()。

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

也可以使用

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

第123章 SQL函数 SEARCH_INDEX

从索引的 Find() 方法返回一组值的函数。

大纲

SEARCH_INDEX([[schema_name.]table-name.]index-name[,findparam[,...])

参数

  • table-name - 可选 — 为其定义了 index-name 的现有表的名称。不能是一个视图。表的 schema_name 是可选的。如果省略,则搜索 子句中指定的所有表。
  • - 要搜索的索引。现有索引的索引映射的 。
  • findparam - 可选 — 要传递给索引的 方法的参数或逗号分隔的参数列表。

描述

调用 方法并返回一组值。可以选择将参数传递给此 方法。例如, 调用 方法。

可以与 子句中的 %FIND 谓词一起使用,以提供对象的 ,该对象提供封装一组值的抽象表示。这些值通常是查询运行时调用的方法返回的行 。 调用索引的 方法来返回这个 。此用法显示在以下示例中:

该索引必须在 语句引用的表中找到。如果 语句使用的表中不存在指定的索引名称,则会生成 SQLCODE -151 错误。如果指定的索引名不是完全限定的,则会生成 错误,因此在 语句使用的表中不明确(可能引用多个现有索引)。

如果索引存在,但没有对应的 方法,则生成运行时 错误,错误为 。

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

第122章 SQL函数 RTRIM

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

大纲

RTRIM(string-expression)

{fn RTRIM(string-expression)}

参数

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

描述

RTRIM 从字符串表达式中去除尾随空格,并将字符串作为 VARCHAR 类型返回。如果 为 ,则 返回 。如果 是一个完全由空格组成的字符串,则 返回空字符串 ()。

无论要裁剪的输入表达式的数据类型是什么,总是返回数据类型。

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

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

示例

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

/// d ##class(PHA.TEST.SQLFunction).Rtrim()
ClassMethod Rtrim()
{
	s a="     Test string with 5 leading and 5 trailing spaces.     "
	&sql(
		SELECT {fn RTRIM(:a)} INTO :b
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,"Before RTRIM",!,"start:",a,":end"
		w !,"After RTRIM",!,"start:",b,":end" 
	}
}
0
0 170
文章 姚 鑫 · 四月 23, 2022 2m read

第121章 SQL函数 RPAD

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

大纲

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

参数

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

描述

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

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

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

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

示例

0
0 180
文章 姚 鑫 · 四月 22, 2022 5m read

第120章 SQL函数 ROUND

以指定位数舍入或截断数字的数值函数。

大纲

ROUND(numeric-expr,scale[,flag])

{fn ROUND(numeric-expr,scale[,flag])}

参数

  • numeric-expr - 要四舍五入的数字。一个数值表达式。
  • scale - 计算结果为整数的表达式,该整数指定要舍入到的位数,从小数点开始计数。可以是零、正整数或负整数。如果 scale 是小数, 会将其四舍五入为最接近的整数。
  • flag - 可选 — 一个布尔标志,指定是舍入还是截断 。默认值为 0

返回与 相同的数据类型。

描述

此函数可用于将数字舍入或截断为指定的小数位数。

将 舍入或截断以缩放位置,从小数点开始计数。舍入时,数字 5 始终向上舍入。在 循环或截断操作后删除尾随零。不返回前导零。

  • 如果 为正数,则在小数点右侧的该位数处进行舍入。如果 等于或大于小数位数,则不会发生舍入或零填充。
  • 如果 为零,则舍入到最接近的整数。换句话说,在小数点右边的零位处进行舍入;所有小数位和小数点本身都被删除。
  • 如果 为负数,则在小数点左侧的该位数处进行舍入。如果 等于或大于舍入结果中的整数位数,则返回零。
  • 如果 为零(但表示为:、 等),将返回 (零)且没有小数位,而不管比例值如何。
  • 如果 或 为 , 返回 。

请注意,

0
0 280
文章 Jiakeng Lei · 四月 22, 2022 1m read

问题: 通过JDBC连接Oracle19C数据报错 "ORA-28040: No matching authentication protocal"

解决 : 1、在数据库服务器上找到sqlnet.ora文件,一般在oracle安装目录app/oracle/product/19.0.0.0/db_1/network/admin/sqlnet.ora

2、如果有进行修改,没有直接创建

3、slqnet.ora文件新增或修改以下 SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

4、注意事项: ① 如果没有sqlnet.ora文件可以直接创建 vi sqlnet.ora ② 如果有不能直接vi 需要使sed -a 命令追加,否则会导致ora文件乱码 ③ 添加参数后新无需重启数据库或者监听,但是需要修改用户密码,否则会报错

5、修改用户名密码

sqlplus / as sysdba

alter user 用户名 identified by 新密码;

2
0 363
文章 姚 鑫 · 四月 21, 2022 1m read

第119章 SQL函数 RIGHT

标量字符串函数,它从字符串表达式的末尾(最右边的位置)返回指定数量的字符。

大纲

{fn RIGHT(string-expression,count)}

参数

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

描述

RIGHT 从字符串表达式的末尾(最右边的位置)返回 个字符。如果为任一参数传递 值, 将返回 。

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

示例

以下示例返回 Sample.Person 表中每个名称最右边的两个字符:

SELECT Name,{fn RIGHT(Name,2)}AS MiddleInitial
     FROM Sample.Person

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

/// d ##class(PHA.TEST.SQLFunction).Right()
ClassMethod Right()
{
	&sql(
		SELECT Name,{fn RIGHT(Name,40)}
			INTO :a,:b
		FROM Sample.Person
	)
	if SQLCODE '= 0 {
		w !,"Error code ",SQLCODE 
	} else {
		w !,a,"=original",!,b,"=RIGHT 40" 
	}
}
0
0 120
文章 姚 鑫 · 四月 20, 2022 2m read

第118章 SQL函数 REVERSE

标量字符串函数,它以相反的字符顺序返回一个字符串。

大纲

REVERSE(string-expression)

参数

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

描述

REVERSE 返回字符顺序颠倒的字符串表达式。例如 'Hello World!' 返回为 '!dlroW olleH'。这是一个简单的字符串顺序反转,没有额外的处理。

返回的字符串是数据类型 VARCHAR,与输入值的数据类型无关。数字转换为规范形式,数字字符串在反转之前不会转换为规范形式。

前导和尾随空白不受反转的影响。

反转 值会导致 NULL

注意:因为 REVERSE 总是返回一个 字符串,所以某些类型的数据在反转时会变得无效:

  • 反向列表不再是有效列表,无法从存储格式转换为显示格式。
  • 反转日期不再是有效日期,并且无法从存储格式转换为显示格式。

示例

以下示例反转 字段值。在这种情况下,这会导致名称按中间名首字母排序:

SELECT Name,REVERSE(Name) AS RevName
FROM Sample.Person
ORDER BY RevName
0
0 137
文章 姚 鑫 · 四月 19, 2022 1m read

第117章 SQL函数 REPLICATE

将字符串重复指定次数的字符串函数。

大纲

REPLICATE(expression,repeat-count)

参数

  • expression - 要重复的字符串表达式。
  • repeat-count - 重复的次数,以整数表示。

描述

注意:REPLICATE 函数是 函数的别名。提供 REPLICATE 是为了与 兼容。有关详细信息,请参阅重复。

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

第116章 SQL函数 REPLACE

字符串函数,用于替换字符串中的子字符串。

大纲

REPLACE(string,oldsubstring,newsubstring)

参数

  • string - 作为子字符串搜索目标的字符串表达式。
  • oldsubstring - 字符串中要匹配的子字符串。
  • newsubstring - 用于替换 oldsubstring 的子字符串。

描述

在字符串中搜索子字符串并替换所有匹配项。匹配区分大小写。如果找到匹配项,它将用 替换 的每个实例。替换子串可能比它替换的子串长或短。如果找不到子字符串,则 将原样返回原字符串。

无论字符串的数据类型如何, 返回的值始终是数据类型 。这允许替换操作,例如 REPLACE(12.3,'.','_')

不能对字符串、 或 newsubstring 参数使用 字段。尝试这样做会生成 错误。

空字符串是字符串值。因此,可以将空字符串用于任何参数值。但是,请注意 ObjectScript 空字符串作为 传递给 。

NULL 不是 中的数据值。因此,为任何 参数指定 将返回 ,无论是否发生匹配。

此函数提供与 实现的兼容性。

REPLACE, STUFF, and $TRANSLATE

和 都执行子字符串替换。 按数据值搜索子字符串。

0
0 186
文章 姚 鑫 · 四月 17, 2022 1m read

第115章 SQL函数 REPEAT

将字符串重复指定次数的字符串函数。

大纲

REPEAT(expression,repeat-count)

{fn REPEAT(expression,repeat-count)}

参数

  • expression - 要重复的字符串表达式。
  • repeat-count - 重复的次数,以整数表示。

描述

REPEAT 返回一串重复计数的表达式实例,连接在一起。

如果表达式为 ,则 返回 NULL。如果 是空字符串,则 返回一个空字符串。

如果重复计数是小数,则仅使用整数部分。如果重复计数为 ,则 返回一个空字符串。如果重复计数是负数、 或非数字字符串,则 返回 。

示例

以下示例显示了 的两种形式。两个示例都返回字符串:

SELECT REPEAT('BANG',3) AS Tripled

BANGBANGBANG
SELECT {fn REPEAT('BANG',3)} AS Tripled

BANGBANGBANG
0
0 153