📜  Teradata子字符串

📅  最后修改于: 2021-01-11 11:28:28             🧑  作者: Mango

Teradata子字符串

Teradata SUBSTRING或SUBSTR函数是Teradata字符串函数之一,用于根据其位置从字符串剪切子字符串。

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

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

句法

SUBSTRING (, , [] )

要么

SUBSTRING ( FROM  FOR )

参数类型和规则

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

  • 字符
  • 字节
  • 数字

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

  • 字符
  • 数字
  • 字节
  • 日期

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

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

结果类型和属性

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

如果字符串参数是:

  • BLOB,则结果类型为BLOB(n)。
  • 除BLOB以外的字节字符串,结果类型为VARBYTE(n)。
  • CLOB,则结果类型为CLOB(n)。
  • 数字或大于CLOB其他<字符>,结果类型是VARCHAR(N)。

在ANSI模式中,n为所得BLOB(n)的数值,VARBYTE(N),CLOB(N),或VARCHAR(n)是一样的原始字符串。

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

SUBSTRING和SUBSTR之间的区别

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

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

SUBSTRING函数的长度是可选的。如果不包括在内,则返回到该列末尾的所有剩余字符。在Teradata的早期版本中,SUBSTR在允许的值上有更多限制。这种情况增加了由于意外的数据或成本导致SQL语句失败的可能性。

  • SUBSTRING和SUBSTR都允许返回部分字符数据字符串,即使在ANSI模式下也是如此。这些函数仅将请求的数据存储在假脱机中,而不是整个列中。因此,可以使用子字符串函数减少或调整所需的线轴空间量。
  • SUBSTR对传递给它们的参数值更兼容和更宽容,例如较新的SUBSTRING。
  • SUBSTRING是ANSI标准,因此,这是这两个函数之间的较好选择。