好的,所以我正在进行基本搜索SPROC。 其中一个参数是搜索文本(这将是用户输入的测试,由空格分隔的单词等。)
现在我需要的是在表格中的单个列上搜索这些单词,但我希望它包含所有输入的关键字(目前我所能做的就是其中一个是否存在)
那么有一个特殊的SQL命令允许我这样做吗?
答案 0 :(得分:2)
您可以尝试这样的事情
检查所需单词的出现次数,并与拆分单词的数量进行比较。
我发现的所有问题都与部分单词匹配,但这可能会让你开始
/*
ALTER FUNCTION [dbo].[SplitString]
(
@String VARCHAR(8000) ,
@Delimiter VARCHAR(10)
)
RETURNS @RetTable TABLE(
String varchar(1000)
)
AS
BEGIN
DECLARE @i INT ,
@j INT
SELECT @i = 1
WHILE @i <= LEN(@String)
BEGIN
SELECT @j = CHARINDEX(@Delimiter, @String, @i)
IF @j = 0
BEGIN
SELECT @j = LEN(@String) + 1
END
INSERT @RetTable SELECT SUBSTRING(@String, @i, @j - @i)
SELECT @i = @j + LEN(@Delimiter)
END
RETURN
END
*/
DECLARE @SearchString VARCHAR(MAX)
SELECT @SearchString = 'your,of'
DECLARE @SearchStringTable TABLE(
Words VARCHAR(MAX)
)
DECLARE @TABLE TABLE(
Col VARCHAR(MAX)
)
INSERT INTO @TABLE (Col)
SELECT
'On the Insert tab, the galleries include items that are designed to coordinate with the overall look of your document.'
INSERT INTO @TABLE (Col)
SELECT
'You can use these galleries to insert tables, headers, footers, lists, cover pages, and other document building blocks.'
INSERT INTO @TABLE (Col)
SELECT
'When you create pictures, charts, or diagrams, they also coordinate with your current document look.'
INSERT INTO @SearchStringTable (Words) SELECT * FROM dbo.SplitString(@SearchString,',')
SELECT t.Col,
COUNT(1) AS Number
FROM @TABLE t,
@SearchStringTable s
WHERE CHARINDEX(s.Words,t.Col) > 0
GROUP BY t.Col
HAVING COUNT(1) = (SELECT COUNT(1) FROM @SearchStringTable)
答案 1 :(得分:0)
您需要将@SEARCH_TEXT拆分为单词,并将其理想地存储在临时表@FILTER_TABLE中,其中包含一个包含单词的WORD列。您可以谷歌搜索“sql逗号分割...”,但回答this question可能会有所帮助。 This也很有趣。
然后,您只需在查询中使用JOIN来过滤行。然后返回所有匹配的最简单的查询是:
SELECT t.*
f.WORD
FROM MyTable t
JOIN @FILTER_TABLE f
ON t.MyColumn = f.WORD --// = or LIKE operator
但是,如果您提供数据和预期结果的示例,那么人们可能会更有帮助。