2013-07-02 26 views
1

我有一個表,我試圖運行一個SQL查詢(經典ASP)。該表的結構類似於這樣:ASP SQL在一個表中的多列中搜索一個字符串

ID Name City  State Zip  Country 
1 Name1 Los Angeles CA  90210 USA 
2 Miami New York NY  10011 USA 
3 Name3 Miami  FL  33184 USA 

我希望能夠運行一個查詢,檢索多個列(如「邁阿密,佛羅里達州)並返回正確的結果

搜索進來作爲Name=SearchTerm,和我目前的SQL查詢是:

fp_sQry="SELECT * FROM tableName WHERE ((Shiur = '2') or (Shiur IS NULL)) AND ((City LIKE '::Name::%') or (State LIKE '%::Name::') or (Name LIKE '%::Name::%') or (Zip LIKE '%::Name::%') or (Country LIKE '%::Name::%')) AND (Nusach LIKE '%::Nusach::%') ORDER BY Name ASC" 

既然這樣,我只能對單個列執行搜索,所以Name=Miami實際搜索的所有列返回所有正確的結果,而Name=Miami, + FL或Name=Miami+FL返回0結果。

有關如何調整我的查詢以匹配多個列中查詢的多個部分的任何想法?

回答

3

看起來像我試圖在不支持全文搜索的後端上進行全文搜索。你可能會更好地從Access切換到SQL Server。 IIRC甚至連Express版本都支持full-text search這幾天。

在訪問你可以種通過修改您的查詢像這樣的模擬全文搜索:

SELECT * 
FROM tableName 
WHERE (Shiur = '2' OR Shiur IS NULL) 
    AND City + State + Name + Zip + Country LIKE '%::Name::%' 
    AND Nusach LIKE '%::Nusach::%' 
ORDER BY Name ASC 

注意,所有級聯字段(City + State + Name + Zip + Country)必須是相同的數據類型。

但是,即使如此,如果要搜索多個術語,仍然需要解析輸入字符串並修改查詢。對於示例輸入Miami+FL你需要分割的字符串:

inputString = "Miami+FL" 
searchTerms = Split(inputString, "+") 

查詢修改是這樣的:

SELECT * 
FROM tableName 
WHERE (Shiur = '2' OR Shiur IS NULL) 
    AND City + State + Name + Zip + Country LIKE '%::param1::%' 
    AND City + State + Name + Zip + Country LIKE '%::param2::%' 
    AND Nusach LIKE '%::Nusach::%' 
ORDER BY Name ASC 

,並通過searchTerms(0)searchTerms(1)爲2 parameters到查詢。

+0

這個答案幫助澄清了一些事情,謝謝一堆! ('Shiur ='2')或者'()'或者'fp_sQry ='SELECT * FROM tblShuls WHERE((Shiur ='2'))或者使用DIM searchTerm仍然不能工作,inputSplit searchTerm = Request.querystring(「Name」)inputSplit = Split(searchTerm,「,」) (Shiur IS NULL))AND City + State + Name + Zip + Country LIKE'%:: response.write searchTerm ::%'or(City =':: City ::')or(Country =':: Country: :')AND(Nusach LIKE'%:: Nusach ::%')ORDER BY Name ASC「' 我最終得到了我的數據庫中所有條目的結果,所以它們顯然都符合這個非常開放的通配符。 –

+0

我不認爲'response.write searchTerm'屬於那裏。但是,您仍然應該使用參數化查詢(請參閱我的答案中的最後一個鏈接或[此問題]的答案(http://stackoverflow.com/q/1092512/1630171))。 –

相關問題