You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:54:04