Teradata 子字符串

2025年3月17日 | 阅读 3 分钟

Teradata SUBSTRING 或 SUBSTR 函数是 Teradata 字符串函数之一,它用于根据字符串的位置从字符串中截取子字符串。

SUBSTR 或 SUBSTRING 在 Teradata 中将以相同的方式工作。但是,语法可能不同。

我们对 Teradata SUBSTRING 使用 ANSI 语法,对 Teradata SUBSTR 使用 Teradata 语法。ANSI 语法旨在与其他数据库系统兼容。

语法

参数类型和规则

SUBSTRING 和 SUBSTR 对以下类型的参数进行操作

  • Character
  • Byte
  • 数字

如果 string_expression 参数是数字,则用户定义类型 (UDT) 将隐式转换为以下任何预定义类型

  • Character
  • 数字
  • Byte
  • DATE

要定义 UDT 的隐式转换,我们使用 CREATE CAST 语句并指定 AS ASSIGNMENT 子句。

系统运算符和函数(包括 SUBSTRING 和 SUBSTR)的 UDT 隐式类型转换是 Teradata 对 ANSI SQL 标准的扩展。要禁用此扩展,请将 DBS Control 记录的 DisableUDTImplCastForSysFuncOp 字段设置为 TRUE。

结果类型和属性

以下是 SUBSTR 和 SUBSTRING 的默认结果类型和属性,例如

如果字符串参数是

  • BLOB,则结果类型为 BLOB(n)。
  • 除 BLOB 之外的字节字符串,则结果类型为 VARBYTE(n)。
  • CLOB,则结果类型为 CLOB(n)。
  • 除 CLOB 之外的数字或字符串,则结果类型为 VARCHAR(n)。

在 ANSI 模式下,结果 BLOB(n)、VARBYTE(n)、CLOB(n) 或 VARCHAR(n) 的 n 值与原始字符串相同。

Teradata 模式下,结果类型 n 的值取决于结果字符串中的字符或字节数。要获取结果字符串的数据类型,我们可以使用 TYPE 函数。

SUBSTRING 和 SUBSTR 之间的区别

SUBSTR 函数是原始的 Teradata 子字符串操作。它的编写是为了与 DB/2 兼容。

  • 它可以在 SELECT 列表中使用,以将存储在列中的字符数据的任何部分返回给客户端,或在 WHERE 子句中使用。
  • 当我们使用 SUBSTR 函数(例如 SUBSTRING)时,需要提供列的名称以及起始字符位置和要返回的字符的长度或数量。
  • 主要区别在于,逗号用作这三个参数之间的分隔符,而不是 FROM 和 FOR。

SUBSTRING 函数的长度是可选的。当不包含长度时,将返回列末尾的所有剩余字符。在 Teradata 的早期版本中,SUBSTR 对允许的值有更多限制。这种情况增加了由于意外数据或成本导致 SQL 语句失败的几率。

  • 即使在 ANSI 模式下,SUBSTRING 和 SUBSTR 都允许返回部分字符数据字符串。这些函数仅将请求的数据存储在 spool 中,而不是整个列。因此,可以使用子字符串函数减少或调整所需的 spool 空间。
  • SUBSTR 在传递给它们的参数值方面更兼容,并且对参数值的容错性更强,就像较新的 SUBSTRING 一样。
  • SUBSTRING 是 ANSI 标准,因此,它是这两个函数中更好的选择。

下一个主题Teradata 表类型