簡體   English   中英

具有多個值的SQL復雜搜索查詢

[英]SQL Complex Search Query With Multiple Value

我正在嘗試實現某些不確定的方法。 我正在基於ASP Classic和SQL 2008,IIS7的網站上工作。 在搜索頁面中,我可以選擇讓每個查詢具有幾對值,例如default.asp?q=one|two|three&q2=four|five|six
我想做的是使用通配符,以防我的查詢沒有價值,並且能夠在同一列中同時搜索成對單詞,以防我的查詢具有成對價值。 這是我想做的:

  1. 如果查詢有價值,那么可以在數據庫中進行查詢(這很簡單)
  2. 如果查詢的一對值用“ |”分隔 簽名,然后將它們拆分並搜索所有它們。
  3. 如果查詢根本沒有任何價值,請使用通配符而不搜索任何內容。

因此,為實現此目的,我嘗試了幾件事,但未獲得任何成功。 這是我的代碼示例。

一個-----------

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM