为所有国家/地区划分城市、州和邮政编码



这可能是一个常见的问题,在过去已经解决了很多次,但我找不到在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

最新更新