首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从分号分隔的varchar列中提取元素

从分号分隔的varchar列中提取元素
EN

Stack Overflow用户
提问于 2014-06-06 05:47:08
回答 2查看 632关注 0票数 0

我有一个表,其中一列是一组用分号分隔的值。我希望查询该列中包含我的值之一的所有行,并将该值提取为结果集的一部分。例如:

代码语言:javascript
运行
复制
MyTable
[Name], [Tags]
Bob, A;B;C
Alice, Me-X
Janet, Me-Y;A

如果我关心的值在set Me-X, Me-Y, Me-Z中,我希望从Tags列中选择名称和值。因此,这样的select将返回:

代码语言:javascript
运行
复制
Alice, Me-X
Janet, Me-Y

目前,获取记录和所有标记都很简单,如下所示:

代码语言:javascript
运行
复制
SELECT [Name], [Tags] FROM MyTable WHERE [Tags] LIKE '%Me-%'

..。但是拆分标签列并取出标签是我不确定该怎么做的事情。我环顾四周,发现在SQL中拆分字符串( seems like )并不理想。我不能更改模式或将SPROCS添加到数据库中,这一事实加剧了这种情况。

有没有人知道一种更好的方法,让我可以在这些约束下做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2014-06-06 06:03:03

如果您只想选择要搜索的标签,请尝试这样做(这实际上并不是从表中选择标签值,但值在其中,所以这不是重点

代码语言:javascript
运行
复制
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

-编辑

对不起,我刚刚又读了一遍问题,注意到你想要一组值

票数 0
EN

Stack Overflow用户

发布于 2014-06-06 06:05:55

如果您有一个包含所有标签的列表,则可以执行以下操作:

代码语言:javascript
运行
复制
select name, tag
from table t join
     tags
     on ';'+tags.tag+';' like '%;'+t.tags+';%' ;

现在我已经说过了,将列表存储在字符串中是一个非常非常糟糕的想法。SQL具有用于存储列表的强大数据结构。它被称为“表”。在这种情况下,您需要一个连接表,每个名称一行,每个标记一行。我确实理解有时你不能改变数据结构而被卡住,但是如果你可以,引入一个连接/关联表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24070739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档