我有一个表,其中一列是一组用分号分隔的值。我希望查询该列中包含我的值之一的所有行,并将该值提取为结果集的一部分。例如:
MyTable
[Name], [Tags]
Bob, A;B;C
Alice, Me-X
Janet, Me-Y;A如果我关心的值在set Me-X, Me-Y, Me-Z中,我希望从Tags列中选择名称和值。因此,这样的select将返回:
Alice, Me-X
Janet, Me-Y目前,获取记录和所有标记都很简单,如下所示:
SELECT [Name], [Tags] FROM MyTable WHERE [Tags] LIKE '%Me-%'..。但是拆分标签列并取出标签是我不确定该怎么做的事情。我环顾四周,发现在SQL中拆分字符串( seems like )并不理想。我不能更改模式或将SPROCS添加到数据库中,这一事实加剧了这种情况。
有没有人知道一种更好的方法,让我可以在这些约束下做到这一点?
发布于 2014-06-06 06:03:03
如果您只想选择要搜索的标签,请尝试这样做(这实际上并不是从表中选择标签值,但值在其中,所以这不是重点
DECLARE @myTag nvarchar(10)
SET @myTag='Me'
SELECT [Name], @myTag [Tags]
FROM MyTable
WHERE [Tags] LIKE '%;'+@myTag+ ';%' --if your tag is in the middle of the string
OR [Tags] LIKE '%;'+@myTag --if it ends with your tag
OR [Tags] LIKE @myTag+ ';%' --it it starts with your tag-编辑
对不起,我刚刚又读了一遍问题,注意到你想要一组值
发布于 2014-06-06 06:05:55
如果您有一个包含所有标签的列表,则可以执行以下操作:
select name, tag
from table t join
tags
on ';'+tags.tag+';' like '%;'+t.tags+';%' ;现在我已经说过了,将列表存储在字符串中是一个非常非常糟糕的想法。SQL具有用于存储列表的强大数据结构。它被称为“表”。在这种情况下,您需要一个连接表,每个名称一行,每个标记一行。我确实理解有时你不能改变数据结构而被卡住,但是如果你可以,引入一个连接/关联表。
https://stackoverflow.com/questions/24070739
复制相似问题