[英]SQL Complex Search Query With Multiple Value
我正在嘗試實現某些不確定的方法。 我正在基於ASP Classic和SQL 2008,IIS7的網站上工作。 在搜索頁面中,我可以選擇讓每個查詢具有幾對值,例如default.asp?q=one|two|three&q2=four|five|six
。
我想做的是使用通配符,以防我的查詢沒有價值,並且能夠在同一列中同時搜索成對單詞,以防我的查詢具有成對價值。 這是我想做的:
因此,為實現此目的,我嘗試了幾件事,但未獲得任何成功。 這是我的代碼示例。
一個-----------
@style nVarchar(150) = ''
Select * FROM mytable WHERE CONTAINS(style, @style) AND ...
我可以設法將查詢拆分為類似'"* value1 *" OR "* value2 *"'
以從CONTAINS中獲得最佳結果,但是如果“ style”具有價值,則此方法有效。 如果樣式沒有價值,則沒有通配符,因此我可以檢索所有數據而無需過濾數據庫。
兩個---------------
@style nVarchar(150) = ''
Select * FROM mytable WHERE style LIKE '%' + @style + '%' AND ...
使用LIKE子句,我可以使用'%'
類'%'
通配符,以防樣式沒有任何值,但是我無法在同一列中搜索對值。
因此,請記住我正在使用“存儲過程”,因為這很復雜,我需要在幾個地方使用它。 我將對此搜索有10-12個查詢。
任何想法都會幫助我實現這一目標。
我了解您的問題是值之間用“ |”分隔。 在SQL 2008中,您可以使用Xml函數將字符串轉換為表並針對基表進行查詢:
DECLARE @style VARCHAR(MAX) = 'value1|value2|value3'
DECLARE @v XML
SET @v = '<r><n>' + REPLACE(@style, '|', '</n><n>') + '</n></r>'
SELECT * FROM mytable
OUTER APPLY
(
SELECT c.value('text()[1]', 'varchar(50)') AS v FROM @v.nodes('//n') AS t(c)
) t
WHERE style LIKE '%' + t.v + '%'
有幫助嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.