在 Snowflake 中复制 STUFF SQL

Replicate STUFF in Snowflake SQL

你好雪花社区,

我正在尝试在 Snowflake 中复制 STUFF 函数。我在参考列表中没有找到类似名称的函数,所以希望有人能给我指明正确的方向吗?

Googled example

谢谢各位好心人

你可以构造一个字符串。所以,对于:

stuff(col, x, y, str)

使用:

left(col, x) || str || substr(col, x + y + 1) 

加上 Gordon 提供的内容,如果您想要一个用户定义的函数来减少您必须编写的转换量,这个应该可行:

create or replace function STUFF(S string, STARTPOS int, LENGTH int, NEWSTRING string)
returns string
language SQL
as
$$
left(S, STARTPOS) || NEWSTRING || substr(S, STARTPOS + LENGTH + 1) 
$$;

看看ARRAY_AGG。这将为您提供重组为数组的字段的所有分组记录。对于您图片中的示例:

SELECT SEC_NAME,ARRAY_AGG(USR_NAME) AS USR_NAME
FROM TABLE_NAME
GROUP BY SEC_NAME

如果这还不够,请在上面使用 ARRAY_TO_STRING

参考:https://docs.snowflake.com/en/sql-reference/functions/array_to_string.html

链接的示例在我看来并不像 STUFF,尽管我确实不熟悉它。不过,我很惊讶没有人提到 LISTAGG,这似乎至少在示例中完全符合您的要求。对于该示例,我希望通过此查询获得该结果:

SELECT SEC_NAME, LIST(USR_NAME)
FROM TABLE
GROUP BY SEC_NAME

您分享的 link 另有建议,但如果您真的在 Snowflake 中寻找 stuff 等效函数,那么 insert 函数就是您所需要的。它的用法与 stuff

相同
insert(string, start, length, new_string)

示例代码

Snowflake: select insert('ABC Network', 1, 3, 'News');
SQL Server: select stuff('ABC Network', 1, 3, 'News');