gpt4 book ai didi

SQL WHERE IN 子查询返回逗号分隔的列表

转载 作者:行者123 更新时间:2023-12-02 09:32:00 24 4
gpt4 key购买 nike

假设我在 SQL 表(位置)中有一个字段,其值是分号分隔的列表:

username1;username2;username3

如果我说:

SELECT '''' + REPLACE(owners, ';', ''',''') + '''' FROM Locations WHERE ...

我可以让它输出:

'username1','username2','username3'

...但我想做的是在子查询中使用它:

SELECT * FROM Users WHERE UserName IN (   
SELECT '''' + REPLACE(owners, ';', ''',''') + ''''
FROM Locations WHERE ...
)

因此,本质上我希望该子查询的输出充当 IN() 子句中的字符串。这可能吗?

谢谢!

最佳答案

不,您无法执行您想要执行的操作,请在运行时构造 'username1','username2','username3'

更简单的解决方案是使用 split 函数

分割函数

CREATE FUNCTION [dbo].[Split]
(
@delimited nvarchar(max),
@delimiter nvarchar(100)
)
RETURNS @t TABLE (id int identity(1,1), val nvarchar(max))
AS
BEGIN
declare @xml xml
set @xml = N'<root><r>' + replace(@delimited,@delimiter,'</r><r>') + '</r></root>'

insert into @t(val)
select
r.value('.','varchar(max)') as item
from @xml.nodes('//root/r') as records(r)

RETURN
END

查询

SELECT *
FROM [Users] u
WHERE u.UserName IN ( SELECT val
FROM [Location] l
CROSS APPLY [dbo].[Split](l.owners, ';')
);

关于SQL WHERE IN 子查询返回逗号分隔的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32105866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com