文章
姚 鑫 · 五月 23 阅读大约需 2 分钟

第151章 SQL函数 %TRUNCATE

[toc]

第151章 SQL函数 %TRUNCATE

将字符串截断为指定长度并应用 EXACT 排序规则的排序规则函数。

大纲

%TRUNCATE(expression[,length])

参数

  • expression - 字符串表达式,可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR2)。表达式可以是子查询。
  • 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 BYHome_Street 截断为两个字符。因为街道地址的前两个字符几乎总是数字,所以 Home_Street 字段按其前两个数字的数字顺序排列。

SELECT Name,Home_Street
FROM Sample.Person
ORDER BY %TRUNCATE(Home_Street,2)

第二个示例中的 ORDER BYHome_Street 截断为四个字符。因为某些街道地址的第四个字符不是数字(例如空格),所以以四个(或更多)数字开头的 Home_Street 值按数字顺序排列,然后是包含非数字的 Home_Street 值前四个字符中的字符按字符串顺序排列:

SELECT Name,Home_Street
FROM Sample.Person
ORDER BY %TRUNCATE(Home_Street,4)
0
0 11
讨论 (0)1
登录或注册以继续