如何在SQL Server中将一列数字转换为一个单元格? (查找所有小于1000的素数)

问题描述 投票:1回答:1

我需要写一个查询来打印所有小于或等于1000的素数。我需要将结果打印到一行中,并使用&字符作为分隔符(而不是空格)。像这样:

2&3&5&7&11&13

这是我的代码(Number的数据类型为int,所以我需要将其更改为varchar,以便&字符可以与Number一起显示在一个单元格中:]

with temp as
(select 2 as Number
union all 
select Number + 1 from temp where Number<1000)
, temptwo as
(select * from temp t1
where NOT EXISTS
(select 1 from temp t2
where t1.Number > t2.Number
and t1.Number % t2.Number = 0))
, tempthree as
(select Cast(Number AS Varchar) as Number from temptwo)
select 
STUFF((SELECT  '&' + Number
            FROM tempthree tt
            WHERE  tt.Number = t.Number
            FOR XML PATH('')), 1, 1, '') 
FROM tempthree t
OPTION (MAXRECURSION 0)

但是它实际上不起作用。我不知道是什么问题?到目前为止,它运行良好:

with temp as
(select 2 as Number
union all 
select Number + 1 from temp where Number<1000)
, temptwo as
(select * from temp t1
where NOT EXISTS
(select 1 from temp t2
where t1.Number > t2.Number
and t1.Number % t2.Number = 0))
select Cast(Number AS Varchar) as Number from temptwo
OPTION (MAXRECURSION 0)

但是它只打印出这样的内容:

2
3
5
7
11
13
...

但这不是我想要的。谁能帮忙?

sql sql-server database tsql recursive-query
1个回答
0
投票

您的方法可以确定质数。您只是缺少字符串聚合。

© www.soinside.com 2019 - 2024. All rights reserved.