[toc]
第151章 SQL函数 %TRUNCATE
将字符串截断为指定长度并应用 EXACT
排序规则的排序规则函数。
大纲
%TRUNCATE(expression[,length])
参数
expression
- 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如CHAR
或VARCHAR2
)。表达式可以是子查询。length
- 可选 — 截断长度,指定为整数。返回表达式的初始长度字符。如果省略长度,则%TRUNCATE
排序规则与%EXACT
排序规则相同。可以用双括号将长度括起来以抑制文字替换:((length
))。
描述
%TRUNCATE
将表达式截断为指定的长度,然后在 EXACT
排序规则序列中返回它。
EXACT
排序规则首先按数字顺序排列纯数值(x=+x
的值),然后是字符串排序规则序列中的所有其他字符。 EXACT
字符串整理顺序与 ANSI
标准 ASCII
整理顺序相同:在大写字母字符之前整理数字,在小写字母字符之前整理大写字母字符。标点符号出现在序列中的多个位置。
%TRUNCATE
通过 NULL
不变。
%TRUNCATE
是一个 SQL 扩展,用于 SQL 查找查询。
也可以使用 TRUNCATE()
方法调用从 ObjectScript 调用此函数:
DHC-APP> WRITE $SYSTEM.SQL.TRUNCATE("This long string",9)
This long
示例
以下示例使用 %TRUNCATE
返回 Name
值的前四个字符:
SELECT TOP 5 Name,%TRUNCATE(Name,4) AS ShortName
FROM Sample.Person
以下示例将 %TRUNCATE
应用于子查询:
SELECT TOP 5 Name, %TRUNCATE((SELECT Name FROM Sample.Company),10) AS Company
FROM Sample.Person
以下示例在 GROUP BY
子句中使用 %TRUNCATE
创建一个字母列表,该列表返回以每个字母开头的名称数量:
SELECT Name AS FirstLetter,COUNT(Name) AS NameCount
FROM Sample.Person GROUP BY %TRUNCATE(Name,1) ORDER BY Name
以下两个示例显示 %TRUNCATE
如何执行 EXACT
排序规则。第一个示例中的 ORDER BY
将 Home_Street
截断为两个字符。因为街道地址的前两个字符几乎总是数字,所以 Home_Street
字段按其前两个数字的数字顺序排列。
SELECT Name,Home_Street
FROM Sample.Person
ORDER BY %TRUNCATE(Home_Street,2)
第二个示例中的 ORDER BY
将 Home_Street
截断为四个字符。因为某些街道地址的第四个字符不是数字(例如空格),所以以四个(或更多)数字开头的 Home_Street
值按数字顺序排列,然后是包含非数字的 Home_Street
值前四个字符中的字符按字符串顺序排列:
SELECT Name,Home_Street
FROM Sample.Person
ORDER BY %TRUNCATE(Home_Street,4)