Snowflake中如何让SPLIT_PART支持.和:两种分隔符的OR条件拆分
SPLIT_PART多分隔符OR匹配实现方案
原生SPLIT_PART函数大多不支持直接指定多个分隔符做OR匹配,可通过以下两种通用方案实现需求:
方案1:统一替换分隔符(全兼容所有支持SPLIT_PART的数据库)
无需依赖正则支持,兼容性最高,核心逻辑是先把所有目标分隔符替换为同一种,再调用原生SPLIT_PART拆分。
示例代码:
-- 先将所有冒号替换为点,再按点拆分取最后一段 split_part(replace(data, ':', '.'), '.', -1)
验证效果:
- 输入
first.middle.last:替换后无变化,拆分结果为last - 输入
first.middle:last:替换后变为first.middle.last,拆分结果为last
如果需要支持更多分隔符,可嵌套replace函数,或用translate函数(支持PostgreSQL、Oracle等)简化写法:
-- 同时支持. : - 三种分隔符的写法 split_part(translate(data, ':-', '..'), '.', -1)
方案2:正则拆分(支持正则函数的数据库,如PostgreSQL、Snowflake、MySQL 8.0+)
如果数据库支持正则拆分函数,可直接指定多分隔符规则,写法更简洁易维护:
PostgreSQL示例:
-- 用正则字符组[.:]匹配.或:,拆分数组后取最后一个元素 (regexp_split_to_array(data, '[.:]'))[-1]
Snowflake示例:
-- Snowflake原生SPLIT_PART支持正则分隔符,直接写规则即可 split_part(data, '[.:]', -1)
内容的提问来源于stack exchange,提问作者Lakm
相关产品推荐
相关产品推荐

