[英]SUBSTRING_INDEX() in Snowflake
雪花中 MySQL SUBSTRING_INDEX()
的确切重复函数是什么?
我在 Snowflake 中找到了SPLIT_PART()
但这与SUBSTRING_INDEX()
不完全相同。
例如SUBSTRING_INDEX("www.abc.com", ".", 2);
返回www.abc
第二个分隔符'.'
之后的所有左侧子字符串
但
SPLIT_PART("www.abc.com", ".", 2);
返回abc
它首先拆分,然后只返回字符串的拆分部分。
如何在 Snowflake 中以与 MySQL 相同的方式使用SUBSTRING_INDEX()
使用 ARRAY 操作可以达到类似的效果:
SELECT s.c, ARRAY_TO_STRING(ARRAY_SLICE(STRTOK_TO_ARRAY(s.c, '.'), 0, 2), '.')
FROM (VALUES ('www.abc.com')) AS s(c);
它是如何工作的?
分步骤:
SELECT
s.c,
STRTOK_TO_ARRAY(s.c, '.') AS arr,
ARRAY_SLICE(arr, 0, 2) AS slice,
ARRAY_TO_STRING(slice, '.') AS result
FROM (VALUES ('www.abc.com')) AS s(c);
您可以在此处使用REGEXP_SUBSTR
:
SELECT REGEXP_SUBSTR('www.abc.com', '^[^.]+\.[^.]+');
这是一个演示,显示正则表达式模式按预期工作。
如果未找到子字符串或提供的出现次数大于最大出现次数,MySQL 中的substring_index
函数将返回整个字符串。 假设您想保留该行为,并且您还发现能够提取字符串的非连续部分很有帮助,请考虑使用这种方法。
with cte as (select 'www.abc.com' as txt)
select a.txt, listagg(b.value,'.') within group (order by b.index)
from cte a, lateral split_to_table(a.txt, '.') b
where b.index <=2 --you can also do for e.g. b.index in (1,3) to get 'www.com'
group by a.txt;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.