【问题标题】:Need help to capture part of string value using particular delimiter function in Vertica需要帮助以使用 Vertica 中的特定分隔符函数捕获部分字符串值
【发布时间】:2020-08-25 15:06:00
【问题描述】:

我有一个CustomerKey 表,其中包含一个Key 列,其样本值如下:

ar.system.company.addr.clearinghouse
ar.system.company.addr.dtac.th
ar.system.company.info.clearinghouse.th
.......... ...         ......
ar.system.company.addr.dtac
ar.system.company.addr.paysbuy

现在我必须使用一个函数,它将值返回到第 4 个分隔符 .

喜欢:

ar.system.company.addr
ar.system.company.addr
..... ... .....
ar.system.company.addr

N.B:我发现了一种类似的函数STRTOK(),它在 Snowflake 中使用。但是我在 Vertica 中没有找到这样的功能。

【问题讨论】:

    标签: sql vertica


    【解决方案1】:

    我想你想要regexp_substr():

    select regexp_substr(col, '^[^.]+[.][^.]+[.][^.]+[.][^.]+')
    

    【讨论】:

    • 谢谢。它给出了预期的结果
    【解决方案2】:

    还可以获取列的子字符串,从位置 1 到第 4 次出现 '.',从字符串的位置 1 开始,减去 1。

    像这样:

    WITH
    input(string) AS (
              SELECT 'ar.system.company.addr.clearinghouse'
    UNION ALL SELECT 'ar.system.company.addr.dtac.th'
    UNION ALL SELECT 'ar.system.company.info.clearinghouse.th'
    UNION ALL SELECT 'ar.system.company.addr.dtac'
    UNION ALL SELECT 'ar.system.company.addr.paysbuy'
    )
    SELECT
      SUBSTR(string,1,INSTR(string,'.',1,4)-1) AS what_i_need
    FROM input;
    -- out       what_i_need       
    -- out ------------------------
    -- out  ar.system.company.addr
    -- out  ar.system.company.addr
    -- out  ar.system.company.info
    -- out  ar.system.company.addr
    -- out  ar.system.company.addr
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多