【问题标题】:Extract string after first '/' using snowflake query使用雪花查询在第一个“/”之后提取字符串
【发布时间】:2021-10-14 02:33:50
【问题描述】:

我在雪花中有一个输入表,其中列包含数据模式如下

城市、州/位置/指定

城市状态/位置/指定

城市、州/位置

想仅提取位置并存储在另一列中,您能帮我这样做吗?

【问题讨论】:

    标签: snowflake-cloud-data-platform regexp-substr sql-query-store


    【解决方案1】:

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

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

    简单地说,它正在寻找一个斜杠,然后获取它后面的所有非斜杠字符,这意味着它在下一个斜杠之前结束,或者在字符串的末尾。

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

    Snowflake 文档是 here

    【讨论】:

      【解决方案2】:

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

      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

      【讨论】:

        猜你喜欢
        • 2013-01-21
        • 2014-03-23
        • 2019-05-06
        • 1970-01-01
        • 1970-01-01
        • 2014-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多