文章目录

  • ​​第149章 SQL函数 TRIM​​
  • ​​大纲​​
  • ​​参数​​
  • ​​描述​​
  • ​​要剥离的字符​​
  • ​​示例​​

第149章 SQL函数 TRIM

字符串函数,它返回删除了指定的前导和/或尾随字符的字符串。

大纲

TRIM([end_keyword] [characters FROM] string-expression)

参数

  • ​end_keyword​​​ - 可选 — 一个关键字,指定要剥离的字符串表达式的哪一端。可用值为​​LEADING​​​、​​TRAILING​​​ 或​​BOTH​​。默认为两者。
  • ​characters​​​ - 可选 — 一个字符串表达式,指定要从字符串表达式中删除的字符。指定字符的每个实例都从指定的末端被剥离,直到遇到此处未指定的字符。因此​​TRIM(BOTH 'ab' FROM 'bbbaacaaa')​​​ 返回​​‘c’​​​。在此示例中,​​BOTH​​​ 关键字是可选的。如果未指定字符,​​TRIM​​​ 会去除空格。如果指定了字符,则需要​​FROM​​​ 关键字。如果指定了​​end_keyword​​​ 而未指定字符,则允许使用​​FROM​​​ 关键字(但不是必需的)。如果没有指定这些参数,则不允许使用​​FROM​​ 关键字。
  • ​string-expression​​​ - 要剥离的字符串表达式。字符串表达式可以是列名、字符串文字或另一个函数的结果,其中基础数据类型可以表示为任何字符类型(例如​​CHAR​​​ 或​​VARCHAR2​​​)。如果省略了字符和​​end_keyword​​​,则省略​​FROM​​ 关键字。

描述

​TRIM​​ 从提供的值的开头和/或结尾去除指定的字符。默认情况下,去除字母是区分大小写的。当遇到未在字符中指定的字符时,从任一端停止字符剥离。默认是从字符串表达式的两端去除空格。

无论要修剪的输入表达式的数据类型如何,​​TRIM​​​ 始终返回数据类型 ​​VARCHAR​​。

请注意,在将数字提供给 ​​TRIM​​​ 或任何其他 ​​SQL​​ 函数之前,它们会自动从数字中去除前导零。要保留前导零,必须将数字指定为字符串。

可选的 ​​end_keyword​​ 参数可以采用以下值:

  • ​LEADING​​​ - 关键字,指定要从​​string-expression​​ 的开头删除 characters 中的字符。
  • ​TRAILING​​​ - 关键字,指定要从​​string-expression​​ 的末尾删除 characters 中的字符。
  • ​BOTH​​​ - 关键字,指定要从​​string-expression​​​ 的开头和结尾删除​​characters​​​ 中的字符。​​BOTH​​​ 是默认值,如果未指定​​end_keyword​​ 则使用。

或者,可以使用 ​​LTRIM​​​ 修剪前导空白,或使用 ​​RTRIM​​ 修剪尾随空白。

要使用前导或尾随空格或其他字符填充字符串,请使用 ​​LPAD​​​ 或 ​​RPAD​​。

可以使用 ​​LENGTH​​ 函数来确定是否已从字符串中删除或添加空格。

要剥离的字符

  • 所有字符:如果字符包含 ​​string-expression​​ 中的所有字符,则 ​​TRIM​​ 返回一个空字符串。
  • 单引号字符:如果单引号字符在字符和字符串表达式中都是双引号,则​​Trim​​可以删减这些字符。因此,​​TRIM(BOTH 'a''b' FROM 'bb''ba''acaaa''')​​返回​​’c‘​​。
  • 空格:如果省略字符,​​TRIM​​ 会从字符串表达式中修剪空格。如果指定了字符,则必须包含空格字符以去除空格。
  • ​%List​​:如果 ​​string-expression​​ 是 ​​%List​​,​​TRIM​​ 只能修剪尾随字符,不能修剪前导字符。这是因为 ​​%List​​ 包含前导编码字符。必须将 ​​%List​​ 转换为字符串才能将 ​​TRIM​​ 应用于前导字符。
  • ​NULL​​:如果任一字符串表达式为 ​​NULL​​,​​TRIM​​ 将返回 ​​NULL​​。

示例

以下示例使用 ​​end_keyword​​​ 和 ​​characters​​​ 默认值;它从​​“abc”​​​中删除前导和尾随空格。选择项将​​“^”​​连接到字符串的两端以显示空白。

SELECT '^'||'   abc   '||'^' AS UnTrimmed,'^'||TRIM('   abc   ')||'^' AS Trimmed


^ abc ^ ^abc^

以下示例都是从字符串表达式中去除前导空格的有效语法:

SELECT TRIM(LEADING '   abc   '),TRIM(LEADING FROM '   def   '),TRIM(LEADING ' ' FROM '   ghi   ')

abc def ghi

以下示例从字符串​​“xxxabcxxx”​​​的开头删除字符​​“x”​​​,得到​​“abcxxx”​​:

SELECT TRIM(LEADING 'x' FROM 'xxxabcxxx') AS Trimmed

abcxxx

以下示例均删除了​​“xxxabcxxx”​​​开头和结尾的字符​​“x”​​​,结果为​​“abc”​​​。第一个指定 ​​BOTH​​​,第二个将 ​​BOTH​​ 作为默认值:

SELECT TRIM(BOTH 'x' FROM 'xxxabcxxx') AS Trimmed

abc
SELECT TRIM('x' FROM 'xxxabcxxx') AS Trimmed

abc

以下示例从​​“abcxzzxyyyyz”​​​的末尾删除字符​​“xyz”​​​的所有实例,从而产生​​“abc”​​:

SELECT TRIM(TRAILING 'xyz' FROM 'abcxzzxyyyyz') AS Trimmed.

abc

下面的示例去掉​​FirstName​​​中的所有字母,返回前面有空格的姓氏,从而修剪​​FullName​​​。例如​​FirstName/Fullname‘fred’/‘fred Rogers’​​​返回​​‘Rogers’​​​。在本例中,​​FirstName‘Annie’​​​将从​​LastName​​​中去掉​​‘Ann’​​​、​​‘Anne’​​​、​​‘Ani’​​​、​​‘Ain’​​​、​​‘Annee’​​​或​​‘Annie’​​​,但不会完全去掉​​‘Anna’​​​,因为​​Trim​​​区分大小写;只会去掉​​‘A’​​​,而不是​​‘a’​​。

SELECT TRIM(LEADING FirstName FROM FullName) FROM Sample.Person

以下示例从​​FavoriteColors​​​值中删除前导字母​​"B"​​​或​​"R"​​。请注意,必须将列表转换为字符串,才能对前导字符应用剪裁:

SELECT TOP 15 Name,FavoriteColors,
TRIM(LEADING 'BR' FROM $LISTTOSTRING(FavoriteColors)) AS Trimmed
FROM Sample.Person WHERE FavoriteColors IS NOT NULL

第149章 SQL函数 TRIM_sql