将所有符合条件的结果拼接成一列并用逗号隔开

网络编程 2025-03-23 20:38www.168986.cn编程入门

经过研究,我们发现这个问题与数据类型varchar和nvarchar的选择有关。varchar是一种可变长度的字符数据类型,如果没有在定义时指定长度n,其默认长度为1。而在我们的函数中,由于没有明确指定长度,导致结果在某些情况下被截断。为了解决这个问题,我们需要明确指定varchar的长度或者使用nvarchar数据类型。

考虑到多语言站点的需求,为了减少字符转换问题,建议使用Unicode数据类型nchar或nvarchar。在我们的场景中,由于需要拼接字符串,并且希望结果不受字符数限制,我们应该选择nvarchar数据类型并在定义时明确指定长度。

```sql

CREATE TABLE tb(id INT, value NVARCHAR(MAX));

INSERT INTO tb VALUES(1, 'aa');

INSERT INTO tb VALUES(1, 'bb');

INSERT INTO tb VALUES(2, 'aaa');

INSERT INTO tb VALUES(2, 'bbb');

INSERT INTO tb VALUES(2, 'c');

CREATE FUNCTION [dbo].[f_str](@id INT) RETURNS NVARCHAR(MAX) AS

BEGIN

DECLARE @str NVARCHAR(MAX);

SET @str = '';

SELECT @str = @str + ',' + CAST(value AS NVARCHAR(MAX)) FROM tb WHERE id = @id;

SET @str = RIGHT(@str, LEN(@str) - 1);

RETURN @str;

END;

--调用函数

SELECT id, value = dbo.f_str(id) FROM tb GROUP BY id;

```

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by