【问题标题】:SQL : Splitting a column into multiple columns, by a common string separator where string has uneven length (TD14)SQL:将一列拆分为多列,通过一个常见的字符串分隔符,其中字符串的长度不均匀(TD14)
【发布时间】:2015-01-09 08:35:00
【问题描述】:

我在拆分我正在记录的变量时遇到问题,其中各种值用@ 符号分隔。我想将值分成多列并删除字符串分隔符 (@)。

注意:这些值通常是文本,但可能是可变长度。

我在 Google 和 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

【问题讨论】:

  • 旁注:这是一个(不是

标签: sql formatting teradata string-split


【解决方案1】:

您的 Teradata 版本是什么?

TD14 支持STRTOK:

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

【讨论】:

  • TD14,抱歉没有指定。 STRTOK 有效,但不幸的是我认为我的字符串太长,因为当我超过 9 列时出现以下错误(我需要更多):SELECT 失败。 9804:响应行大小或常量行大小溢出。其次,当我添加不属于 STRTOK 表达式的其他列时,我还会遇到另一个问题。 (如果你能解释什么是错的,我会很高兴):选择失败。 6810:UDM 调用“STRTOK”的所有者表达式不是 UDT 还有其他建议吗?
  • 任何替代解决方案?正则表达式..?
  • STRTOK 结果为 VARCHAR(8000) UNICODE,您可以简单地将其转换为较短的字符串
【解决方案2】:

我认为您还可以使用 REGEXP_SPLIT_TO_TABLE 函数将源字符串拆分为一个表,其中每个值作为一行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多