Как найти второе / третье вхождение в строку в Snowflake / SQL - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь воссоздать функцию 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)

Цель состоит в том, чтобы найти второе вхождение персонажа, а затем вернуть все, что осталось от него.

Поле: 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;

Все эти столбцы (af) показывают 7 вместо 13 (если значением было CGM415_Black_3XL).

1 Ответ

1 голос
/ 07 ноября 2019

Следующий SQL даст вам результат

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

regexp_instr (sku, '-', 1,2) даст вам позицию 2nd _

...