SQL:在字符串长度不均匀的情况下,使用公共字符串分隔符将一列拆分为多列(TD14)

SQL:在字符串长度不均匀的情况下,使用公共字符串分隔符将一列拆分为多列(TD14),sql,formatting,teradata,string-split,Sql,Formatting,Teradata,String Split,我在拆分正在录制的变量时遇到了一个问题,在该变量中,不同的值用@符号分隔。我想将这些值分成多列,并删除字符串分隔符(@) 注意:值通常为文本,但长度可能可变 我在谷歌上搜索了无数次Stackoverflow的解决方案,但大多数都不适用,因为我有可变的字符串长度和可变的值长度:( 提前谢谢 例如: Original column -------------------------------- Value1@Value2@Value3@Value4@Value5 Value1@Value2@Val

我在拆分正在录制的变量时遇到了一个问题,在该变量中,不同的值用
@
符号分隔。我想将这些值分成多列,并删除字符串分隔符(
@

注意:值通常为文本,但长度可能可变

我在谷歌上搜索了无数次Stackoverflow的解决方案,但大多数都不适用,因为我有可变的字符串长度和可变的值长度:(

提前谢谢

例如:

Original column
--------------------------------
Value1@Value2@Value3@Value4@Value5
Value1@Value2@Value3
Value1@Value2@Value3@Value4@Value5@Value6`
我想要的是:

Column1    Column2     Column3   Column4      Column5   Column6
----------------------------------------------------------------------
Value1     Value2      Value3    Value4       Value5
Value1     Value2      Value3
Value1     Value2      Value3    Value4       Value5    Value6

您的Teradata版本是什么

TD14支持STRTOK:

STRTOK(col,'@',1), STRTOK(col,'@',2), STRTOK(col,'@',3), etc.

我想您也可以使用REGEXP_SPLIT_TO_TABLE函数将源字符串拆分为一个表,每个值都作为一行。

旁注:这是一个列(不是一个列)TD14,很抱歉没有指定。strok可以工作,但不幸的是,我认为我的字符串太长了,因为当我超过9个列时会出现以下错误(我需要更多):SELECT失败。9804:响应行大小或常量行大小溢出。其次,当我添加不属于STRTOK表达式的其他列时,我还遇到另一个问题。(如果您能解释错误,我将非常高兴):SELECT失败。6810:UDM调用“STRTOK”的所有者表达式不是UDT任何其他建议?任何替代解决方案?Regex..?STRTOK导致VARCHAR(8000)UNICODE,您只需将其转换为较短的字符串即可