2014-01-20 38 views
1

我不確定這是否可能,我完全不知道如何正確地問這個問題,但我會試一試。SQL Server反轉CONTAINS

我正在使用SQL Server 2008 R2,並且有一個包含值「1000」的數據庫列。 現在我將從界面中獲得以下值:「100023」。

現在我想寫一個SQL Server查詢,在那裏我可以使用100023並找到包含1000的行。因此,我不想使用CONTAINS與1000找到100023,但另一種方式周圍。我想這樣做,因爲界面也會返回像100024,100025,100025這樣的值,但我總是隻想擁有包含1000的行。我可悲地不能改變界面的返回值,並將最後兩個值數字關閉。

我不確定,如果這在邏輯上甚至是合理的,但也許有人可以幫助我。

在此先感謝!

+0

所以參數是'100023'(varchar),你想查找所有記錄是_substrings_? –

+1

你打電話給查詢怎麼樣?如果你可以執行一個任意的查詢,爲什麼你不能將這兩個字符截斷呢? –

+1

我感到矛盾。值100024和100025包含1000,但你說你不想要它們。 –

回答

2

你可以使用LIKE

DECLARE @param varchar(10) 
SET @param = '100023' 

SELECT Value 
FROM dbo.TableName 
WHERE @param LIKE '%' + Value + '%' 

Demo

+0

由於以'1000'開頭的值不會'LIKE值+'%''更準確嗎? – everton

+0

@EvertonAgner:但他想要['CONTAINS']的「opoosite」(http://technet.microsoft.com/en-us/library/ms187787.aspx),並且還提到:_「包含* * 1000「__ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _,_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ <_ _ _ _ _ _ _ _ –

+0

據我瞭解這個問題,他想查詢'100023','100024','100025'等,總是找到'1000'。 – everton

1

如果我理解正確的您的要求。下面的查詢將得到你正在查找的行,而不會實際改變輸入參數(好吧,不需要對輸入參數進行任何修改)。如果你能夠在查詢之前進行前一個操作的修改,你將得到可充分平等條款的充分利益,因此是一個很好的索引尋求。

DECLARE @param varchar(10) 
SET @param = '100023' 


declare @testTable table(num int, described_as varchar(100)) 

insert into @testTable values 
(1000, 'The number one thousand'), 
(2000, 'The number two thousand') 

SELECT * 
FROM @testTable 
WHERE num = FLOOR(ROUND(@param, -2))/100 

如果不是,請嘗試更改您的文本,以便社區可以更好地理解您的要求。 :)