【发布时间】:2019-11-09 22:44:44
【问题描述】:
我的数据集中有一列,我想在其中提取特定位置的数字仅当字符串结构包含#-#-#。
我如何用 SQL 写这个(目前用雪花写)?
例子:
Column_A
abc-net-met-1234-12345-431-5968
abc-eme-ejt-emdn-1948-192
jen-mdk-ent-193-102-1029398
loe-ekd-12-49-nfm
我希望我的预期输出是:
Column_A Number1 Number2 Number3 Number4
abc-net-met-1234-12345-431-5968 1234 12345 431 5968
abc-eme-ejt-emdn-1948-192 NULL NULL NULL NULL
jen-mdk-ent-193-102-1029398 193 102 1029398 NULL
loe-ekd-12-49-nfm NULL NULL NULL NULL
我认为它会是这样但有问题:
CASE WHEN COLUMN_A LIKE '%#-#-#%' THEN SPLIT_PART(COLUMN_A, '-', 4) ELSE NULL END Number1
CASE WHEN COLUMN_A LIKE '%#-#-#%' THEN SPLIT_PART(COLUMN_A, '-', 5) ELSE NULL END Number2
CASE WHEN COLUMN_A LIKE '%#-#-#%' THEN SPLIT_PART(COLUMN_A, '-', 6) ELSE NULL END Number3
CASE WHEN COLUMN_A LIKE '%#-#-#%' THEN SPLIT_PART(COLUMN_A, '-', 7) ELSE NULL END Number4
【问题讨论】:
-
哪种类型的 SQL?
-
雪花文档说“ANSI”
-
那么,如果序列中有至少 3 个数字,您想要这些数字...不管字符串数如何?如果数字用 A-B-1-2-Z-3 之类的字符串分隔会怎样?
-
那不行,需要这样:
#-#-# -
由于不同的
Column_A的数字序列从不同的部分开始,因此无法提取具有常量4-7的数字。
标签: sql string split sql-like snowflake-cloud-data-platform