如下所示,仅供参考
CREATE OR ALTER FUNCTION MYFUN(@S VARCHAR(100), @n int, @p varchar(10))--@n--->需要拼接几个单词
RETURNS VARCHAR(100)
AS
BEGIN
DECLARE
@RS VARCHAR(100), --最终拼接后返回的结果字符串
@LENGTH INT, --目标字符串以某个分隔符分割后的数量
@i INT = 1 --循环次数,与@n形成计算公式,代表每次循环拼接的是倒数第几个
SET @LENGTH = (SELECT Count(value) FROM String_split(@S, @p))--使用String_split(目标字符串, 分隔符)表函数,该函数分割后返回单列表,列名是value
SET @RS = ''; --赋初始值,为空(不是空格哦)
--验证传入的字符串是否大于等于拼接后的字符串
IF @LENGTH < @n
BEGIN
RETURN '目标字符串长度小于拼接后字符串'
END;
WHILE @i <= @N --开始循环
BEGIN
--Row_number()OVER(ORDER BY Getdate()) 查询时添加序号,并且不改变原来的顺序
--@LENGTH - @n + @i 按正序拼接
SET @RS =
(SELECT CONCAT(@RS,
(SELECT value
FROM (SELECT value,
Row_number()
OVER(
ORDER BY Getdate()) AS rn
FROM String_split(@S, @p)) t
WHERE rn = @LENGTH - @n + @i), ' '));
SET @i = @i + 1;
END;
RETURN @RS
END;
SELECT DBO.MYFUN('苹果 香蕉 雪梨 荔枝 西瓜', 3, ' ') --