使用雪花查询在第一个“/”之后提取字符串

Extract string after first '/' using snowflake query

我在 snowflake 中有一个输入 table,其列包含如下数据模式

city, state/LOCATION/designation

city state/LOCATION/designation

city, state/LOCATION

只想提取位置并存储在另一列中,你能帮我做这个吗?

有几种方法可以做到这一点:

A) 使用SPLIT_PART函数:

SELECT SPLIT_PART('city, state/LOCATION/designation', '/', 2);

参考:SPLIT_PART

B) 使用 SPLIT_TO_TABLE 表格函数:

 SELECT t.VALUE
   FROM TABLE(SPLIT_TO_TABLE('city, state/LOCATION/designation', '/')) AS t
  WHERE t.INDEX = 2;

参考:SPLIT_TO_TABLE

C) 使用 REGEXP 表达式:

SELECT REGEXP_REPLACE('city, state/LOCATION/designation', '(.*)/(.*)/(.*)', '\2');

但是如果你没有第三个任期 ('designation'),这个就不起作用,你需要结合两个调用并检查反斜杠的数量。

SELECT IFF(REGEXP_COUNT('city, state/LOCATION', '/') = 1,
           REGEXP_REPLACE('city, state/LOCATION','(.*)/(.*)','\2'), 
           REGEXP_REPLACE('city, state/LOCATION','(.*)/(.*)/(.*)','\2'));

参考:REGEXP_REPLACE

您可以使用 SPLIT_PART,如前一个答案中所述,但如果您想使用正则表达式,我会使用 REGEXP_SUBSTR,如下所示:

REGEXP_SUBSTR(YOUR_FIELD_HERE,'/([^/]+)',1,1,'e')

简而言之,它正在寻找一个斜线,然后获取它后面的所有非斜线字符,这意味着它恰好在下一个斜线之前或在字符串的末尾结束。

1,1,'e'对应于:从字符串的第一个字符开始,返回第一个匹配项,提取子串(括号内的所有内容)。

Snowflake 文档是 here