#sql #snowflake-cloud-data-platform
#sql #snowflake-cloud-data-platform
Вопрос:
Вероятно, это распространенная проблема, которая решалась довольно много раз в прошлом, но я не смог найти решение для ее реализации в Snowflake и для нескольких стран. Итак, разместите его здесь для экспертного руководства.
Поскольку мои данные включают несколько стран, я хотел бы проанализировать их соответствующим образом. Вот некоторые примеры данных.
CITY_STATE_ZIP
ANN ARBOR, MI 48104-4000
Zürich, ZH 8004
San Diego, CA 92127
Toronto, ON M5C 3G7
Ответ №1:
Ваш «почтовый индекс» отображается как последний элемент, разделенный пробелом в city_state_zip
столбце. Если это так:
select regexp_substr(city_state_zip, '[^ ]
Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
select regexp_substr(city_state_zip, ' ([^ ] )
Вы можете распространить это на все после запятой, кроме первой части:
select regexp_replace(city_state_zip, '.*, [^ ] (. )
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ',', 0), split_part(CITY_STATE_ZIP, ',', -1), regexp_substr(city_state_zip, ' ([^ ] )$')
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
SELECT CITY_STATE_ZIP,
SPLIT_PART(CITY_STATE_ZIP, ',', 0) AS CITY,
SUBSTRING(SPLIT_PART(TRIM(CITY_STATE_ZIP), ',', -1), 1, 3) AS STATE,
regexp_replace(city_state_zip, '.*, [^ ] (. )
Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
)
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ',', 0), split_part(CITY_STATE_ZIP, ',', -1), regexp_substr(city_state_zip, ' ([^ ] )$')
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ',', 0), split_part(CITY_STATE_ZIP, ',', -1), regexp_substr(city_state_zip, ' ([^ ] )$')
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)
Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ',', 0), split_part(CITY_STATE_ZIP, ',', -1), regexp_substr(city_state_zip, ' ([^ ] )$')
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
, '1')
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)
Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
, ‘\1’) AS ZIP
FROM foo
)
Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
, ‘1’)
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.
)
Вы можете быть немного более четкими в отношении разделяющего пространства, если хотите:
Вы можете распространить это на все после запятой, кроме первой части:
Вот db<>fiddle, который использует Oracle, который довольно близок к Snowflake по синтаксису для этой цели.
Комментарии:
1. Спасибо @Gordon! Как мне разделить здесь государственную часть? Я попробовал следующее, но это также дает мне почтовый индекс. ВЫБЕРИТЕ CITY_STATE_ZIP, split_part(CITY_STATE_ZIP, ‘,’, 0), split_part(CITY_STATE_ZIP, ‘,’, -1), regexp_substr(city_state_zip, ‘ ([^ ] )$’)
2. Кроме того, это не работает для канадских или некоторых европейских почтовых индексов, поскольку у них есть пробел в почтовых индексах.
3. Julaayi . , , я добавил еще одну альтернативу.
4. это все еще не работает для меня. Для почтовых индексов Канады / Европы он возвращает только последние три значения вместо 7 значений, включая пробел в почтовом индексе.
5. @Julaayi . , , Возможно, вам придется настроить третий аргумент, чтобы он был правильной обратной ссылкой для Snowflake. Например, это может потребовать
'\1'
.
Ответ №2:
Основываясь на предложении Гордона, я закончил с этой логикой для разделения на три столбца. Разместите его здесь, если это может помочь кому-то в будущем.