【问题标题】:Split String Teradata SQL拆分字符串 Teradata SQL
【发布时间】:2014-07-01 14:31:02
【问题描述】:

我希望在 Teradata 中拆分字符串。

表格可能看起来像这样。

column1
hello:goodbye:afternoon

我正在尝试使用 SUBSTRING 和 INSTR 来提取特定的单词。所以,假设我想选择“再见”。我正在尝试以下查询。

SELECT SUBSTRING(a.column1 from index(a.column1,':')+1 for INSTR(a.column1,':',0,2))
FROM db.table as a

我收到以下错误。

SELECT Failed. [3707] Syntax error, expected something like ')' between the word 'INSTR' and '('

我不确定为什么会出现该错误。它让我可以使用 INDEX 来代替 INSTR 推断一个数字,所以我不确定为什么在我使用 INSTR 时它会这样。

【问题讨论】:

  • 您使用的是哪个版本的 Teradata?我猜它是仅在 TD 14 中引入的,如果您使用的是旧版本,那么您需要获得相同的 UDF...
  • 看起来我已经 13 岁了。那我该怎么做呢?
  • 如果您可以安装 INSTR UDF,这是最简单的选择。否则,您可能不得不修改 POSITION...您可以从这里获取 UDF - downloads.teradata.com/download/extensibility/…

标签: sql database substring teradata


【解决方案1】:

如果这是 TD14,你就不需要 INSTR,有一个 STRTOK 函数 :-)

STRTOK(column1,':',2),

对于早期版本,它是

CASE 
   WHEN column1 LIKE '%:%:%'
   THEN SUBSTRING(column1 FROM POSITION(':' IN column1) + 1 FOR POSITION(':' IN 
        SUBSTRING(column1 FROM POSITION(':' IN column1) + 1)) - 1)
   WHEN column1 LIKE '%:%'
   THEN SUBSTRING(column1 FROM POSITION(':' IN column1) + 1)
END

CASE LIKE 只是为了防止在没有冒号时出现“string subscript out of bound”错误。

【讨论】:

  • STRTOK 仅适用于单个分隔符。如果分隔符由两个字符组成(例如“->”)破折号和大于怎么办?
猜你喜欢
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 2021-08-26
  • 2016-03-15
  • 2021-12-06
  • 2013-02-05
相关资源
最近更新 更多