分割字符串 Teradata SQL

7

我希望在Teradata中分割一个字符串。

表格可能看起来像这样。

column1
hello:goodbye:afternoon

我正在尝试使用SUBSTRING和INSTR提取特定单词。比如说,我想选择“goodbye”。我正在尝试以下查询。

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... - visakh
看起来我在13号了。那么我该如何进行这个操作呢? - cloud36
如果您能安装 INSTR UDF,则这是最简单的选项。否则,您可能需要尝试使用 POSITION 函数 … 您可以在此处获取 UDF:https://downloads.teradata.com/download/extensibility/teradata-udfs-for-popular-oracle-functions - visakh
1个回答

15

如果这是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"错误。


2
STRTOK只能使用单个分隔符。如果分隔符由两个字符组成(例如“->”)破折号和大于号,该怎么办? - Bhavesh Ghodasara

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接