第128章 SQL函数 %SQLSTRING
将值排序为字符串的排序规则函数。
大纲
%SQLSTRING(expression[,maxlen])
%SQLSTRING expression
参数
-
expression
- 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如CHAR
或VARCHAR
)。表达式可以是子查询。 -
maxlen
- 可选 — 一个正整数,指定整理后的值将被截断为maxlen
的值。请注意,maxlen
包括附加的前导空格。可以用双括号将maxlen
括起来以抑制文字替换:((maxlen
))。
描述
%SQLSTRING
将表达式转换为按(区分大小写)字符串排序的格式。 %SQLSTRING
从字符串中去除尾随空格(空格、制表符等),然后在字符串的开头添加一个前导空格。这个附加的空格强制将 NULL 和数值作为字符串进行整理。从数字中删除前导零和尾随零。
因为 %SQLSTRING
将空格附加到所有值,所以它将 NULL
值整理为空格,字符串长度为 1
。 %SQLSTRING
将任何仅包含空格(空格、制表符等)的值整理为 SQL 空字符串(''
)。当 %SQLSTRING
将空格附加到空(零长度)字符串时,它会将空格加上空字符串的内部表示形式 $CHAR(0)
进行整理,从而导致字符串长度为 2
。
可选的 maxlen
参数在索引或整理时将表达式字符串截断为指定的字符数。例如,如果插入带有 maxlen
截断的字符串,则插入完整的字符串,并且可以通过 SELECT
语句检索;此字符串的全局索引被截断为指定长度。这意味着 ORDER BY 和比较操作仅评估截断的索引字符串。这种截断对于对超过下标的最大字符长度的字符串进行索引特别有用。使用 maxlen
参数,如果需要对长字段进行索引,可以使用截断长度参数。
%SQLSTRING
在转换表达式后执行 maxlen
截断;如果 maxlen
超过转换后的表达式的长度,则不添加填充。最大字符串长度为 3,641,144
个字符; maxlen
没有强制执行最大值。
可以使用 %SYSTEM.Util
类的 Collation()
方法在 ObjectScript 中执行相同的排序规则转换:
DHC-APP> WRITE $SYSTEM.Util.Collation("The quick, BROWN fox.",8)
The quick, BROWN fox.
也可以使用 SQLSTRING()
方法调用从 ObjectScript 调用此函数:
DHC-APP> WRITE $SYSTEM.SQL.SQLSTRING("The quick, BROWN fox.")
The quick, BROWN fox.
这两种方法都支持 SQLSTRING
转换后的截断。请注意,截断长度必须包括附加的空白:
DHC-APP>WRITE $SYSTEM.Util.Collation("The quick, BROWN fox.",8,6)
The q
DHC-APP>WRITE $SYSTEM.SQL.SQLSTRING("The quick, BROWN fox.",6)
The q
注意:要将系统范围的默认排序规则从 %SQLUPPER
(不区分大小写)更改为 %SQLSTRING
(区分大小写),请使用以下命令:
WRITE $$SetEnvironment^%apiOBJ("collation","%Library.String","SQLSTRING")
发出此命令后,必须清除索引,重新编译所有类,然后重建索引。不要在其他用户访问表的数据时重建索引。这样做可能会导致查询结果不准确。
示例
以下查询在 WHERE
子句中使用 %SQLSTRING
来执行区分大小写的选择:
SELECT Name FROM Sample.Person
WHERE %SQLSTRING Name %STARTSWITH %SQLSTRING 'Al'
ORDER BY Name
image.png
默认情况下,%STARTSWITH
字符串比较不区分大小写。此示例使用 %SQLSTRING
格式使此比较区分大小写。它返回所有以“Al”
开头的名称(例如 Allen
、Alton
等)。请注意,使用 %STARTSWITH
时,应将 %SQLSTRING
排序规则应用于语句的两侧。
以下示例使用带有字符串截断的 %SQLSTRING
来返回每个名称的前两个字符。请注意,字符串截断是 3
(不是 2
),因为 %SQLSTRING
添加了前导空格。 ORDER BY
子句使用这个两个字符的字段将行放在一个粗略的排序顺序中:
SELECT Name, %SQLSTRING(Name,3) AS FirstTwo
FROM Sample.Person
ORDER BY FirstTwo
image.png
此示例在不更改字母大小写的情况下返回截断的值。
以下示例将 %SQLSTRING
应用于子查询:
SELECT TOP 5 Name, %SQLSTRING((SELECT Name FROM Sample.Company),10) AS Company
FROM Sample.Person
image.png
网友评论