Snowflake中是否存在与MySQL SUBSTRING_INDEX()功能完全一致的函数
Snowflake中实现MySQL SUBSTRING_INDEX等效功能的方案
如果不想创建自定义函数,可直接通过SPLIT+ARRAY_SLICE+ARRAY_JOIN的组合实现对应逻辑:
- 当count为正数(取前count个分隔符左侧所有内容):
-- 等价于MySQL中 SUBSTRING_INDEX("www.abc.com", ".", 2) SELECT ARRAY_JOIN(ARRAY_SLICE(SPLIT('www.abc.com', '.'), 0, 2), '.') AS result; -- 输出:www.abc
- 当count为负数(取后|count|个分隔符右侧所有内容):
-- 等价于MySQL中 SUBSTRING_INDEX("www.abc.com", ".", -2) SELECT ARRAY_JOIN(ARRAY_SLICE(SPLIT('www.abc.com', '.'), -2), '.') AS result; -- 输出:abc.com
如果需要和MySQL完全一致的调用体验,可以创建SQL自定义函数,后续直接调用即可:
CREATE OR REPLACE FUNCTION SUBSTRING_INDEX(str STRING, delimiter STRING, count INT) RETURNS STRING LANGUAGE SQL AS $$ CASE WHEN count = 0 THEN '' WHEN count > 0 THEN ARRAY_JOIN(ARRAY_SLICE(SPLIT(str, delimiter), 0, count), delimiter) ELSE ARRAY_JOIN(ARRAY_SLICE(SPLIT(str, delimiter), count), delimiter) END $$;
创建完成后即可和MySQL用法完全一致调用,覆盖所有边界场景:
- 正参数调用:
SELECT SUBSTRING_INDEX('www.abc.com', '.', 2);→ 返回www.abc - 负参数调用:
SELECT SUBSTRING_INDEX('www.abc.com', '.', -2);→ 返回abc.com - count为0:
SELECT SUBSTRING_INDEX('www.abc.com', '.', 0);→ 返回空字符串 - 分隔符不存在:
SELECT SUBSTRING_INDEX('test_str', '.', 1);→ 返回原字符串test_str - 多字符分隔符:
SELECT SUBSTRING_INDEX('a||b||c', '||', 2);→ 返回a||b
内容的提问来源于stack exchange,提问作者Mukul Kumar
相关产品推荐
相关产品推荐

