【问题标题】:How to split the single column to multiple column in snowflake sql [duplicate]如何在雪花sql中将单列拆分为多列[重复]
【发布时间】: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,仍然缺少一些东西

标签: sql snowflake-cloud-data-platform


【解决方案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) 作为“语言”。但在我看来,你的输入键应该是一致的(不应该在记录之间改变)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 2017-03-28
相关资源
最近更新 更多