如何在 Snowflake/SQL 中的字符串中找到 second/third 的出现

How to find a second/third occurrence in a string in Snowflake/SQL

我正在尝试将 Tableau 中的 FINDNTH 函数重新创建到 Snowflake/SQL 中。用于此公式:lower(ifnull(left([SKU],(FINDNTH([SKU],"_",2)-1)),[SKU]))

https://help.tableau.com/current/pro/desktop/en-us/functions_functions_string.htm FINDNTH(string, substring, occurrence)

目标是找到第二次出现的字符,然后 return 找到它剩下的所有内容。

字段:CGM415_Black_3XL

期望的结果:CGM415_Black

我试过使用 Position 和 Charaindex

https://docs.snowflake.net/manuals/sql-reference/functions/position.html https://docs.snowflake.net/manuals/sql-reference/functions/charindex.html


    Select

    position('_',sku) a,
    position('_',sku,a) b,
    position('_',sku,position('_',sku)) c,
    CHARINDEX('_',sku) d,
    CHARINDEX('_',sku,d) e,
    CHARINDEX('_',sku,CHARINDEX('_',sku)) f,

    sku from DATABASE;

所有这些列 (a-f) 都显示 7 而不是 13(如果 CGM415_Black_3XL 是值)。

下面SQL给你结果

substring(sku,1,regexp_instr(sku,'_',1,2)-1)

regexp_instr(sku,'-',1,2) 会给你第 2 个 _

的位置