Teradata,将字段拆分为多行 Using STRTOK_SPLIT_TO_TABLE for <b> and <\b> 语法错误

Teradata, splitting field into several rows Using STRTOK_SPLIT_TO_TABLE for <b> and <\b> Syntax error

我在一个名为内容的字段中有这个

<b>Value 1</b> <b>Value 2 </b> - <b>Value 3 </b>

我想将每个字段中的每个内容分成单独的记录,所以如果有 5 个,我会有 5 个记录,如果它有 20 个 ID 有 20 个记录,等等。我尝试使用这个:

SELECT d.* FROM Audit as t (strtok_split_to_table(t.ID, t.CONTENT, '</b>')
   RETURNS (outkey integer, tokennum integer, token varchar(20)character set unicode) ) as d order by 1,2;

但是它出错了语法错误,应该是';'之类的东西在 't' 和 '(' 之间。有没有更好的方法来做到这一点而不使用 strtok_split_to_table 我是新手所以不要对我太苛刻,:)

单元格的内容如下所示```

<b>Case Owner</b></b> <b>Old Value : </b> - <b>New Value : </b>joe.mercer <br/>  <BR>NoteID: 123456</BR><BR>Action: Add</BR><BR>NoteType: Big Note</BR>                        <BR>NoteID: 123456</BR><BR>Action: Update</BR><BR>NoteType: Big Note</BR>               
<b>Notes</b> <b>Old Value : </b> - <b>New Value : </b>THIS IS AN BIG DEAL~SEE DEAL # A1223456.  <br/> <b>Decision Date</b> <b>Old Value : </b> - <b>New Value : </b>08-05-2021 09:05 <br/> <b>Initial Review Completed Date</b> <b> ``` 
``` <b>Sub Category</b> <b>Old Value : </b>Radio Service(E101) - <b>

您的语法一团糟(您需要派生表或 CTE)并且 STRTOK 按字符拆分,而不是字符串(这些字符中的任何一个都会拆分,而不是序列 '</b>')。

您需要 RegExp_split_to_table 和另一个 RegEx 来清理结果:

with t as
 (
   select id, CONTENT
   from Audit
)
select id, TokenNum
  ,regexp_substr(Token, '.*<b>\K.*') -- trim everything up to '<b>'
FROM TABLE (RegExp_Split_To_Table(t.id, t.content, '<\/b>', 'i') -- split whenever '<\/b>' occurs
     RETURNS ( id INT,
               TokenNum INT,
               Token VARCHAR(100) CHARACTER SET Unicode)
             ) AS dt
             

编辑:

关于 9134 错误:尝试增加结果 TOKEN 的长度。如果您的输入是 VarChar(35000),则它不能是 UNICODE -> 也更改为 LATIN。