我正在嘗試查找與正在搜索的單詞部分具有完全匹配的所有記錄。SQL精確匹配列中的單詞
例如,如果我正在查找其中包含單詞spire
的所有記錄,我不想檢索aspire
或inspire
的行。
SELECT *
FROM Table
WHERE name LIKE '%SearchedWord%'
我正在嘗試查找與正在搜索的單詞部分具有完全匹配的所有記錄。SQL精確匹配列中的單詞
例如,如果我正在查找其中包含單詞spire
的所有記錄,我不想檢索aspire
或inspire
的行。
SELECT *
FROM Table
WHERE name LIKE '%SearchedWord%'
您需要拆分name
列中的單詞,然後需要完全匹配。
正在關注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
然後做在name
列中使用的詞語精確匹配以下SELECT
聲明:
SELECT *
FROM [Table]
WHERE 'SearchedWord' IN (SELECT value FROM dbo.SplitWords(name))
前兩者的名字和喜歡的圖案後添加空格:
select * from Table where ' ' || name || ' ' like '% SearchWord %'
||
是ANSI SQL級聯。有些產品代替+
或concat()
。
在類似的地方添加空格意味着它只搜索其中有空格的單詞,不知道該空間是否會在im試圖找到的單詞之前或之後。此外,名稱上的聯繫人應該做什麼,這是試圖搜索的列,並且如果我嘗試將其複製到SQL Server時只是給我沒有結果? – user3691566
您可能要考慮全文搜索,具體取決於您使用的數據庫。另外,你應該在數據庫中標記你的問題。 –
for MySQL:select * from表where regexp'[[:<:]] SearchWord [[:>:]]' –