2016-02-01 27 views
-1

我想過濾,其通過使用存儲的過程包含空間數據...這裏是通過使用此我可以篩選如果在列數據數據假設代碼如何在like子句中逃避空間?

ALTER PROCEDURE [dbo].[sp_ProductDetail1] 
@SearchKeyword nvarchar(50) = null 
AS 
BEGIN 
SET NOCOUNT ON; 
select T.*,P.*,PV.* from TranmissionRecord as T 
inner join Price_tbl as P On P.PartNo = T.Part_number 
inner join ProductVRM as PV On PV.V_PID = T.V_PID 
where (REPLACE([T].[ProGrp_SubGrp_SubName], ' ', '') LIKE '%' + @SearchKeyword + '%') OR (PV.Make like '%' + @SearchKeyword + '%')OR (PV.Model like '%' + @SearchKeyword + '%') OR (PV.EngineModel like '%' + @SearchKeyword + '%') OR (PV.Fuel like '%' + @SearchKeyword + '%') OR (T.Product_code like '%' + @SearchKeyword + '%') OR (PV.EngineSize like '%' + @SearchKeyword + '%') OR (PV.EngineNo like '%' + @SearchKeyword + '%') OR (T.MSCode like '%' [email protected]+ '%') OR (T.ProGrp_SubGrp_Code like '%' [email protected]+ '%') OR (T.ProGrp_SubGrp_Name like '%' [email protected]+ '%') OR (T.Model_details like '%' [email protected]+ '%') OR (T.SubModelGroup like '%' [email protected]+ '%') OR (T.Part_number like '%' [email protected]+ '%') OR (T.Supplier like '%' [email protected]+ '%') OR (T.Description like '%' [email protected]+ '%') OR (T.SupplierAdditionalInformation_01 like '%' [email protected]+ '%') OR (T.FuelDelivery like '%' [email protected]+ '%') OR (T.TransmissionTypes like '%' [email protected]+ '%') OR (T.MMI_key like '%' [email protected]+ '%') OR (T.Year_range like '%' [email protected]+ '%') OR (T.Position like '%' [email protected]+ '%') OR (T.Section like '%' [email protected]+ '%') OR (T.Supplier like '%' [email protected]+ '%') OR (T.SupplierAdditionalInformation_07 like '%' [email protected]+ '%') OR (P.PartSubName like '%' [email protected]+ '%') OR (P.PartNo like '%' [email protected]+ '%') OR (P.Price like '%' [email protected]+ '%') OR (PV.Vrm like '%' [email protected]+ '%') OR (PV.Vin like '%' [email protected]+ '%') OR (PV.Transmission like '%' [email protected]+ '%') OR (PV.YearOfManufacture like '%' [email protected]+ '%') OR (PV.MamMake like '%' [email protected]+ '%') OR (PV.MamModel like '%' [email protected]+ '%') 
END 

是「ABS環」和我「LL型‘ABS環’,那麼它會顯示所有的數據,但我想,如果我輸入‘ABS’或‘absring’或‘AB’......我的意思是必須匹配的關鍵字來過濾數據...

請幫我,這將是很大的幫助...感謝u人

+0

,你能否告訴我們,舉例來說,某些輸入連同你是否希望他們能夠匹配? –

+0

是啊...爲什麼不....我的表中有一列名爲「ProGrp_SubGrp_SubNam」,並有數據「ABS環」,所以我想過濾數據使用此列名稱....但條件是如果用戶類型「ab」,「absring」或「abs」...十它必須顯示所有匹配的數據。 –

+0

你可能想看看全文或者有多個或從句 – TheGameiswar

回答

0

做到這一點的方法是從你正在尋找在列中刪除所有空格,如:

SELECT 
      [T].* 
     , [P].* 
     , [PV].* 
    FROM [TranmissionRecord] AS [T] 
    INNER JOIN [Price_tbl] AS [P] 
     ON [P].[PartNo] = [T].[Part_number] 
    INNER JOIN [ProductVRM] AS [PV] 
     ON [PV].[V_PID] = [T].[V_PID] 
    WHERE (REPLACE([T].[ProGrp_SubGrp_SubName], ' ', '') LIKE '%' + @SearchKeyword + '%') 
     OR (REPLACE([PV].[Make], ' ', '') LIKE '%' + @SearchKeyword + '%') 
     OR (REPLACE([PV].[Model], ' ', '') LIKE '%' + @SearchKeyword + '%') 

但它會產生副作用,當用戶輸入'AB'時,它也會返回'RA BLA BLA'。

0

你想改善比賽。例如,給定的數據'ABS Ring',想要此數據通過以下任一匹配:

  • abs
  • ab
  • abs ring
  • absring

直截了當的實施將你現在擁有什麼:

WHERE ([T].[ProGrp_SubGrp_SubName] LIKE '%' + @SearchKeyword + '%') 
    OR ([PV].[Make] LIKE '%' + @SearchKeyword + '%') 
    OR ([PV].[Model] LIKE '%' + @SearchKeyword + '%') 

對於前三個樣本輸入,這將適用於所有這些字段。

對於一個快速和骯髒的解決方案,這將很好地工作一個很小的數據庫(< 10,000行,大概),你可以使用以下命令:

  • 首先,替換搜索關鍵字everhing這不是字母數字,有通配符。在將它傳遞給SQL查詢之前,可以使用正則表達式執行此操作。或者,如果您正在使用存儲過程,則可以在存儲過程中執行以下操作。

例如:

-- Replace everything in the search keyword which is not alphanumeric, 
-- with %. 
-- For example 'abs ring' -> '%abs%ring%' 
while @searchkeyword like '%[^A-Z0-9%]%' 
begin 
    set @searchkeyword = left(@searchkeyword, patindex('%[^A-Z0-9%]%', @searchKeyword) -1) 
     + '%' + substring(@searchkeyword, patindex('%[^A-Z0-9%]%', @searchKeyword) +1, length(@searchkeyword) 
end 
set @searchKeyword = '%' + @searchKeyword + '%' 

現在你有一個搜索詞,其中的空間是可選的。

現在,你希望它匹配品牌,型號,以及零件名稱的任意組合,以任何順序。例如。例如,你想要「ford abs ring」找到一個ford焦點的ABS環。同樣,「abs ring ford」也應該爲ford找到ABS環。

所以,做搜索是這樣的:

-- Concatenate everything in different orders 
-- remove spaces, dashes and dots 
-- then compare to the pattern 
-- Note: You may want to remove additional characters. 
-- To do that, add more REPLACE functions. 
WHERE 
    Replace(Replace(Replace(
     [PV].[Make] + [PV].[Model] + [PV].[Make] 
     + [T].[ProGrp_SubGrp_SubName] 
     + [PV].[Make] + [PV].[Model] + [PV].[Make]), 
    ' ', ''), '.', ''), '-', '') 
    like @searchKeyword 

所以我們現在對MakeModelMakePartNameMakeModelMake

所以我們比較搜索關鍵字的福特福克斯ABS環,我們對配套FordFocusFordABSRingFordFocusFord。這將匹配以下任一搜索詞,因爲他們每個人都可以轉化爲一種模式,像這樣:

  • Ford ABS Ring - >%Ford%ABS%Ring%
  • ABS Ring Focus - >%ABS%Ring%Focus%
  • Ford ABSRing - >%Ford%ABSRing%
  • Ford AB - >%Ford%AB%
  • AB - >%AB%
  • Ford ABS Ring focus - >%Ford%ABS%Ring%Focus
+0

thanx本和geert –

+0

,但它太長了... –

+0

要做困難的事情需要複雜的代碼... – Ben