使用雪花查询在第一个“/”之后提取字符串
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;
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'));
您可以使用 SPLIT_PART,如前一个答案中所述,但如果您想使用正则表达式,我会使用 REGEXP_SUBSTR
,如下所示:
REGEXP_SUBSTR(YOUR_FIELD_HERE,'/([^/]+)',1,1,'e')
简而言之,它正在寻找一个斜线,然后获取它后面的所有非斜线字符,这意味着它恰好在下一个斜线之前或在字符串的末尾结束。
1,1,'e'
对应于:从字符串的第一个字符开始,返回第一个匹配项,提取子串(括号内的所有内容)。
Snowflake 文档是 here。
我在 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;
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'));
您可以使用 SPLIT_PART,如前一个答案中所述,但如果您想使用正则表达式,我会使用 REGEXP_SUBSTR
,如下所示:
REGEXP_SUBSTR(YOUR_FIELD_HERE,'/([^/]+)',1,1,'e')
简而言之,它正在寻找一个斜线,然后获取它后面的所有非斜线字符,这意味着它恰好在下一个斜线之前或在字符串的末尾结束。
1,1,'e'
对应于:从字符串的第一个字符开始,返回第一个匹配项,提取子串(括号内的所有内容)。
Snowflake 文档是 here。