我已在使用下面的SQL,搜索從一字一句
SELECT * FROM Products P
WHERE (P.Name LIKE '%'[email protected]+'%')
現在我需要通過文字搜索詞,是指當我進入Retina Sony
然後我需要尋找Retina
在名稱字段AND
Sony
在名稱字段。意味着我需要將關鍵字中的所有單詞匹配到動畫字段。上面的查詢不適合我。任何線索?
我已在使用下面的SQL,搜索從一字一句
SELECT * FROM Products P
WHERE (P.Name LIKE '%'[email protected]+'%')
現在我需要通過文字搜索詞,是指當我進入Retina Sony
然後我需要尋找Retina
在名稱字段AND
Sony
在名稱字段。意味着我需要將關鍵字中的所有單詞匹配到動畫字段。上面的查詢不適合我。任何線索?
下面是答案,
SELECT * from [Products] P
WHERE NOT EXISTS(SELECT 1 FROM Split(@Keyword,' ') Words WHERE (P.Name NOT LIKE '%' + Words.Items +'%'))
如果是事件使用。 轉換inputed字符串數組和嘗試:
WHERE
(
P.Name LIKE '%'[email protected][0]+'%' OR
P.Name LIKE '%'[email protected][1]+'%'
....
)
這是我的想法。
您可以編寫一個函數來分割,空間字符串的一些事情,如:
CREATE FUNCTION [dbo].[Split]
(
@String VARCHAR(200),
@Delimiter VARCHAR(5)
)
RETURNS @SplittedValues TABLE
(
OccurenceId SMALLINT IDENTITY(1,1),
SplitValue VARCHAR(200)
)
AS
BEGIN
DECLARE @SplitLength INT
WHILE LEN(@String) > 0
BEGIN
SELECT @SplitLength = (CASE CHARINDEX(@Delimiter,@String) WHEN 0 THEN
LEN(@String) ELSE CHARINDEX(@Delimiter,@String) -1 END)
INSERT INTO @SplittedValues
SELECT SUBSTRING(@String,1,@SplitLength)
SELECT @String = (CASE (LEN(@String) - @SplitLength) WHEN 0 THEN ''
ELSE RIGHT(@String, LEN(@String) - @SplitLength - 1) END)
END
RETURN
然後使用這樣的功能:
SELECT * FROM Products P
WHERE (P.Name in (Select * from dbo.Split(@Keyword, ' ')))
CREATE FUNCTION [dbo].[Split]
(
@String NVARCHAR(4000),
@Delimiter NCHAR(1)
)
RETURNS TABLE
AS
RETURN
(
WITH Split(stpos,endpos)
AS(
SELECT 0 AS stpos, CHARINDEX(@Delimiter,@String) AS endpos
UNION ALL
SELECT endpos+1, CHARINDEX(@Delimiter,@String,endpos+1)
FROM Split
WHERE endpos > 0
)
SELECT 'Id' = ROW_NUMBER() OVER (ORDER BY (SELECT 1)),
'Data' = SUBSTRING(@String,stpos,COALESCE(NULLIF(endpos,0),LEN(@String)+1)-stpos)
FROM Split
)
GO
DECLARE @DelimitedString NVARCHAR(128)
SET @DelimitedString = 'Duckman,Cornfed,Ajax,Charles,Mambo'
SELECT * FROM dbo.Split(@DelimitedString, ',')
DECLARE @Keyword nvarchar(128)
SET @Keyword = 'Retina,Cornfed'
select * from Products p where p.name in
(SELECT Data FROM dbo.Split(@Keyword, ','))
檢查現在這個
這我已經測試了它,讓我重溫了這個詞
這不是軟件。請理解在名稱字段中匹配關鍵字的所有關鍵詞 – user960567
無論如何,我從其他帖子得到了答案。 – user960567
聽起來像是一個完美的使用情況下全文搜索:
CREATE TABLE dbo.Products
(
ID INT IDENTITY CONSTRAINT PK_Products PRIMARY KEY CLUSTERED,
Name NVARCHAR(100)
)
GO
CREATE FULLTEXT CATALOG mycatalog;
GO
CREATE FULLTEXT INDEX ON dbo.Products
(
Name LANGUAGE 1033
)
KEY INDEX PK_Products ON mycatalog;
GO
SELECT *
FROM dbo.Products
WHERE FREETEXT(Name, 'Retina AND Sony') -- will match any text that contains the two words, their inflectional forms or synonyms
有搜索的幾種方法以上只是一個例子。
參見: http://msdn.microsoft.com/en-us/library/ms142571.aspx http://msdn.microsoft.com/en-us/library/ms142583.aspx
索尼中期是一個例子。關鍵字可能由1,2,3,4等組成字 – user960567