2014-05-13 206 views
1

我期待在Teradata中拆分字符串。拆分字符串Teradata SQL

表格可能看起來像這樣。

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時這樣做。

+0

您使用的是哪個版本的Teradata?我猜它只是在TD 14中推出的,如果你使用的是舊版本,那麼你需要獲得相同的UDF ... – visakh

+0

看起來像我在13 ..然後我該怎麼做這個操作? – cloud36

+0

如果您可以安裝INSTR UDF,那是最簡單的選擇。否則,您可能需要修改POSITION ...您可以從這裏獲取UDF - https://downloads.teradata.com/download/extensibility/teradata-udfs-for-popular-oracle-functions – visakh

回答

4

如果這是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北京時間只是爲了防止「串下標出界「出錯時,沒有冒號。

+0

STRTOK僅適用於單個分隔符。如果分隔符由兩個字符組成(如「 - >」)破折號和大於? –