列中单词的SQL精确匹配
我试图找到所有与我搜索的单词部分完全匹配的记录 例如,如果我正在查找其中包含单词列中单词的SQL精确匹配,sql,sql-server,match,sql-like,Sql,Sql Server,Match,Sql Like,我试图找到所有与我搜索的单词部分完全匹配的记录 例如,如果我正在查找其中包含单词spire的所有记录,我不想使用aspire或inspire检索行 SELECT * FROM Table WHERE name LIKE '%SearchedWord%' 在name和like图案前后添加空格: select * from Table where ' ' || name || ' ' like '% SearchWord %' |是ANSI SQL连接。有些产品有+或concat()
spire
的所有记录,我不想使用aspire
或inspire
检索行
SELECT *
FROM Table
WHERE name LIKE '%SearchedWord%'
在name和like图案前后添加空格:
select * from Table where ' ' || name || ' ' like '% SearchWord %'
|
是ANSI SQL连接。有些产品有+
或concat()
。您需要从名称
列中拆分单词,然后需要精确匹配
需要创建以下SplitWords
函数。它获取一个句子,并返回其中的单词:
CREATE FUNCTION SplitWords(@text varchar(8000))
RETURNS @words TABLE (
pos smallint primary key,
value varchar(8000)
)
AS
BEGIN
DECLARE
@pos smallint,
@i smallint,
@j smallint,
@s varchar(8000)
SET @pos = 1
WHILE @pos <= LEN(@text)
BEGIN
SET @i = CHARINDEX(' ', @text, @pos)
SET @j = CHARINDEX(',', @text, @pos)
IF @i > 0 OR @j > 0
BEGIN
IF @i = 0 OR (@j > 0 AND @j < @i)
SET @i = @j
IF @i > @pos
BEGIN
-- @i now holds the earliest delimiter in the string
SET @s = SUBSTRING(@text, @pos, @i - @pos)
INSERT INTO @words
VALUES (@pos, @s)
END
SET @pos = @i + 1
WHILE @pos < LEN(@text)
AND SUBSTRING(@text, @pos, 1) IN (' ', ',')
SET @pos = @pos + 1
END
ELSE
BEGIN
INSERT INTO @words
VALUES (@pos, SUBSTRING(@text, @pos, LEN(@text) - @pos + 1))
SET @pos = LEN(@text) + 1
END
END
RETURN
END
您可能需要考虑全文搜索,这取决于所使用的数据库。另外,你应该用数据库标记你的问题。对于MySQL:Select*from Table,其中regexp'[[::]]]在like中添加空格意味着它只搜索有空格的单词,我不知道空格是在我试图查找的单词之前还是之后。还有,姓名上的联系人应该做什么,这是“尝试搜索”中的列,如果我尝试为sql server复制它,则不会给出任何结果?
SELECT *
FROM [Table]
WHERE 'SearchedWord' IN (SELECT value FROM dbo.SplitWords(name))