私が探している単語の一部に完全に一致するすべてのレコードを検索しようとしています。列の単語の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()
です。
のように空白を追加すると、空白が含まれている単語だけが検索されます。そのスペースが、見つけようとしている単語の前後になるかどうかを知ることはできません。また、名前の連絡先はどうすればいいですか?それは検索しようとしている列ですが、SQL Server用に複製しようとすると結果が表示されません。 – user3691566
使用しているデータベースに応じて全文検索を検討してください。また、質問をデータベースに付ける必要があります。 –
for MySQL:選択*テーブルからregexp '[[:<:]] SearchWord [[:>:]]' –