2013-08-26 67 views
0

我想創建一個實用程序存儲過程,可以採取一個參數和查詢一個方便的表檢索一些快速信息。爲此,我需要在參數傳遞之前和之後添加'%'字符,以便在like的查詢中使用它,如下所示。sybase - 簡單的連接

工作代碼 - 如果硬編碼

select some_field from TABLE where nm_field like ('%'+'abc'+'%') 

但是當我嘗試使用同一個變量,相比於上面的查詢

declare @nm char(100) 
select @nm = 'abc' 
select some_field from TABLE where nm_field like ('%'[email protected]+'%') 

在一番調查,審判我得到較小的結果和錯誤,下面的選擇顯示「%」僅在param之前添加,而不在兩側添加。

declare @name char(20), @other char(20) 
select @name = 'abc' 
select @other = ('%' + @name + '%') 
select @other 

期望輸出

%ABC%

但實際輸出

%ABC

我使用Sybase AS E-12.5.4

你能幫我解決這裏出了什麼問題嗎?

回答

0

嘗試改變@nm類型爲varchar如下

declare @nm varchar(100) 
select @nm = 'abc' 
select some_field from TABLE where nm_field like ('%'[email protected]+'%') 

Char類型有一定的大小和db使用空格

填補了一項空白
declare @nm char(100) 
select @nm = 'abc' 

下面選擇

select @nm 

將返回abc和97個空格。

+0

超級!不要得到潛在的問題。 char會發生什麼? – mtk

+0

@mtk我給我的答案添加了一個解釋。正如你所說,你也可以使用修剪功能。對我來說更好的方法是使用'varchar'類型 – Parado

0

看來,我找到了正確的答案。這是導致此行爲的使用char,因爲它的大小是固定的。 varchar不是這樣的,因此連接按預期工作。

隨着char,我們需要添加trim使級聯情況如預期

declare @str char(100) 
select @str ='abc' 
select ('%'+ltrim(rtrim(@str))+'%') 

輸出

%abc%