这可能是一个常见的问题,在过去已经解决了很多次,但我找不到在Snowflake和多个国家实施的解决方案。因此,将其发布在这里以获得专家指导。
由于我的数据包括多个国家,我想对它们进行适当的分析。这是一些样本数据。
CITY_STATE_ZIP
ANN ARBOR, MI 48104-4000
Zürich, ZH 8004
San Diego, CA 92127
Toronto, ON M5C 3G7
您的"邮编";似乎是CCD_ 1列中最后一个用空格分隔的元素。如果是:
select regexp_substr(city_state_zip, '[^ ]+$')
如果你喜欢的话,你可以对分离空间更明确一点:
select regexp_substr(city_state_zip, ' ([^ ]+)$')
您可以将其扩展到逗号后的所有内容,但第一部分除外:
select regexp_replace(city_state_zip, '.*, [^ ]+ (.+)$', '1')
这里有一个db<gt;fiddle,它使用的Oracle在语法上非常接近Snowflake。
根据Gordon的建议,我最终使用了这种逻辑,将其分为三列。张贴在这里,如果这可能有助于未来的人。
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, '.*, [^ ]+ (.+)$', '\1') AS ZIP
FROM foo