【问题标题】:Turning a Comma Separated string into individual rows in Teradata在 Teradata 中将逗号分隔的字符串转换为单独的行
【发布时间】:2015-05-20 06:42:51
【问题描述】:

我读了这篇文章: Turning a Comma Separated string into individual rows

真的很喜欢这个解决方案:

SELECT A.OtherID,  
     Split.a.value('.', 'VARCHAR(100)') AS Data  
 FROM  
 (     SELECT OtherID,  
         CAST ('<M>' + REPLACE(Data, ',', '</M><M>') + '</M>' AS XML) AS Data  
     FROM  Table1
 ) AS A CROSS APPLY Data.nodes ('/M') AS Split(a); 

但是当我尝试在 Teradata 中应用该方法来解决类似问题时,它不起作用。这是总结的错误代码: 选择失败 3707: 期望在 '.' 之间和“价值”关键字。那么代码是否仅在 SQL Server 中有效?有人能帮我让它在 Teradata 或 SAS SQL 中工作吗?您的帮助将不胜感激!

【问题讨论】:

  • 这绝对是一个sql-server唯一的功能。您是否介意发布您的数据现在的样子,以及您希望查询的结果如何?也许那时我们可以编写一些 SQL 或挖掘一个可以在 Teradata 中完成这项工作的函数。
  • 您尝试做些什么来解决它?你有什么尝试?
  • @JNevill 您好 JNevill 和 UpAndAdam,感谢你们愿意提供帮助。我找到了另一种在 SAS 中绕过它的方法。我试图将具有多个描述的字段拆分为“#”以分隔行。这是有效的 SAS 代码:data Example2;设置示例; /* 计算分隔符出现的次数 / count= count(Description, '#'); / 将每个描述输出到单独的观察中 */ do i=1 to count;描述2 =扫描(描述,我,'#');输出;结尾;运行;

标签: string split teradata


【解决方案1】:

这是 SQL Server 语法。

在 Teradata 中有一个名为 STRTOK_SPLIT_TO_TABLE 的表 UDF, 例如

SELECT * FROM dbc.DatabasesV AS db
JOIN 
 (
   SELECT token AS DatabaseName, tokennum
   FROM TABLE (STRTOK_SPLIT_TO_TABLE(1, 'dbc,systemfe', ',')
        RETURNS (outkey INTEGER,
                 tokennum INTEGER,
                 token VARCHAR(128) CHARACTER SET UNICODE)
              ) AS d 
 ) AS dt
ON db.DatabaseName  = dt.DatabaseName
ORDER BY tokennum;

或者查看我对此similar question的回答

【讨论】:

  • 您好,dnoeth,非常感谢您的帮助!虽然我找到了一种方法是 SAS,但您在 Teradata 中向我展示的技巧将来会派上用场。谢谢!
猜你喜欢
  • 2021-12-13
  • 2020-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-02-01
相关资源
最近更新 更多