【发布时间】:2012-03-14 03:26:56
【问题描述】:
我想要一个可以传递文本字符串的 SQL 过程,它会从关键字表中识别文本中的特定关键字(标签)。
到目前为止,我有以下内容非常适合单个单词;
INSERT INTO #tags SELECT Word
FROM dbo.SplitWords('some colours are blue, green, red and light blue')
SELECT Word
FROM #tags
INTERSECT
SELECT Tag
FROM dbo.Tags
DROP TABLE #tags
如果我的标签表有“绿色”、“红色”和“蓝色”条目,它们会按您的预期返回。
我想知道的是,我如何才能最好地获得类似的结果,但对于包含多个单词的标签...例如,“浅蓝色”
我意识到上面代码的问题是我将源文本拆分为单个单词,因此“浅蓝色”永远不会匹配,但是我可以采取不同的路线而不涉及光标等吗?
感谢您的帮助
刚刚意识到以下将实现我所需要的
DECLARE @Text as nvarchar(max)
SELECT @Text = 'some colours are blue, green, red and light blue'
SELECT TagID,
Tag
FROM Tags
WHERE @Text LIKE '% ' + Tag + ' %'
ORDER BY Tag
但我担心如果我的表格有几千行并且我正在搜索的文本字符串很长,它可能会效率低下。
有人对我如何更有效地执行相同的过程有任何想法吗?
【问题讨论】:
-
最简单的方法是使用逗号分隔的标签。
-
谢谢马特,不知道这对我有什么帮助。我已经将我的标签作为表格中的单独行,然后我有一个大的 nvarchar(max) 文本块我想比较。我喜欢做一个相交的想法,因为它给出了非常快的结果,但要做到这一点,我必须将我的文本分成单个单词。如何快速将我的文本与我的表格行进行比较以查找包含多个单词的标签?
-
谢谢康拉德,我同意...我考虑过全文搜索,但您要搜索的文本是否必须在数据库表中才能进行全文搜索或可以你在 SP 中全文搜索变量?
-
@Mojo 你能发布你的问题的解决方案吗??...我有问题
标签: sql sql-server tags intersect