如何在雪花sql中将单列拆分为多列[重复]

Posted

技术标签:

【中文标题】如何在雪花sql中将单列拆分为多列[重复]【英文标题】:How to split the single column to multiple column in snowflake sql [duplicate] 【发布时间】:2021-08-02 08:55:31 【问题描述】:

用下面的表达式提取电路,处理正确。 regexp_substr(SALES_ORDER_ITEM_DESCRIPTION, 'Circuit:\s([a-zA-Z0-9 [] \& ]+)(,\s|$)', 1, 1, 'e') AS "Circuit", 但我发现由于括号而导致电路显示为空的这种情况-->附件:2,电路:国际金融电汇(自助服务),语言:英语,荷兰语,单词:357' 这种情况没有得到处理电路。

【问题讨论】:

请根据question guide 提供示例数据和所需的输出并展示您的尝试。 嗨,粘贴了所需的输出,我正在使用 Regex_substr,仍然缺少一些东西 【参考方案1】:

这应该使用regexp_substr来完成这项工作

SELECT
 regexp_substr(base_string, 'Circuit:\\s([a-zA-Z0-9, ]*)(,\\s|$)', 1, 1, 'e') AS "Cir",
 regexp_substr(base_string, 'Language\\(s\\):\\s([a-zA-Z0-9, ]+)(,\\s|$)', 1, 1, 'e') AS "Language",
 regexp_substr(base_string, 'Words:\\s([a-zA-Z0-9, ]*)(,\\s|$)', 1, 1, 'e') AS "Words"
FROM values
  ('Attachment(s): 2, Circuit: OTC Specialty New York Metro, Language(s): English, Words: 1944'),
  ('Attachment(s): 2, Circuit: North America, Language(s): English, Words: 46'),
  ('Attachment(s): 3, Circuit: North America, Language(s): English,Spanish, Words: 117')
AS my_table(base_string)
;

【讨论】:

非常感谢,帮了大忙。 附件:2,电路:北美,语言:英语,单词:46 此代码运行良好,但在某些情况下,如以下示例:附件:1,语言:英语,字数:400 -- 语言显示为 null 而不是英语 那是因为这里使用的正则表达式依赖于您提供的键名。例如:电路/语言/单词您的关键名称是否会从一个记录更改为另一个记录?例如:语言 -> 语言 如何实现这种情况,请提供您的意见。我有该列的两种方式的数据。语言:/ 语言: 如果你想匹配语言或语言,你可以使用这个正则表达式:regexp_substr(base_string, 'Language(\(s\)|):\\s([a-zA- Z0-9, ]+)(,\\s|$)', 1, 1, 'e', 2) 作为“语言”。但在我看来,你的输入键应该是一致的(不应该在记录之间改变)。

以上是关于如何在雪花sql中将单列拆分为多列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

关于Oracle中实现单列拆分成多列的技术应用

在SQL过程中将一列中的逗号分隔值拆分为多列

将元素为字典的列拆分为多列[重复]

如何使用 pl/sql 中的游标将多列数据插入包含单列的表中?

如何在Oracle sql中将行转换为按多列分组的列[关闭]

在熊猫数据框中将多列拆分为行