2013-06-24 19 views
-1
產品

我已在使用下面的SQL,搜索從一字一句

SELECT * FROM Products P 
WHERE (P.Name LIKE '%'[email protected]+'%') 

現在我需要通過文字搜索詞,是指當我進入Retina Sony然後我需要尋找Retina在名稱字段ANDSony在名稱字段。意味着我需要將關鍵字中的所有單詞匹配到動畫字段。上面的查詢不適合我。任何線索?

回答

0

如果是事件使用。 轉換inputed字符串數組和嘗試:

WHERE 
    (
     P.Name LIKE '%'[email protected][0]+'%' OR 
     P.Name LIKE '%'[email protected][1]+'%' 
     .... 
    ) 

這是我的想法。

+0

索尼中期是一個例子。關鍵字可能由1,2,3,4等組成字 – user960567

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, ' '))) 
+0

這就是我在說的@ user960567 –

+0

這看起來不錯@ChristianMark。我正在檢查 – user960567

+0

我打算自己做這個功能,但這應該是明智之舉。 –

0
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, ',')) 

檢查現在這個

這我已經測試了它,讓我重溫了這個詞

+0

這不是軟件。請理解在名稱字段中匹配關鍵字的所有關鍵詞 – user960567

+0

無論如何,我從其他帖子得到了答案。 – user960567

1

聽起來像是一個完美的使用情況下全文搜索:

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