2013-07-17 28 views
2

我似乎無法正確使用LIKE語句使用存儲過程中的變量。我想從傳遞變量開始的表中找到所有行。在Like語句中使用存儲過程變量

我正在使用以下查詢,其中@id是傳遞給存儲過程的值爲nvarchar(20)。當ID完全匹配時,這可以正常工作,但不能正確使用附加的'%'。什麼是完成這項任務的正確方法?

SELECT * FROM Table WHERE id LIKE @id + '%' 
+0

id是一個字符串(或它的某種形式,varchar,text等)還是一個整數(bigint,int等)? –

+0

應該正常工作 – Lamak

回答

4

這個工作對我來說:

declare @id nvarchar(20) 
select @id = '1' 
SELECT * FROM tab WHERE id LIKE @id + '%' 

Sql Fiddle DEMO

+0

我解決了這個問題。 LIKE並不是什麼錯。感謝您的幫助! – AToya

0

如果@id是空的查詢不起作用。因此,如果@id爲空,您可以將其設置爲空字符串。請嘗試以下操作:

begin 
    declare @id nvarchar(20) 
    set @id = isnull(@id, '') 
    select * from table where id like @id + '%' 
end 

所以在你的程序中,添加以下行應爲您的查詢工作:

set @id = isnull(@id, '') 
0

簡單的解決方案:

$search_q = '%' . $this_search_q. '%'; 

$stmt = $db->prepare("SELECT * FROM tbl_tablename WHERE tablecollumn LIKE :id"); 
$stmt ->bindParam(":id", $search_q); 
$stmt->execute(); 

OR

$search_q = '%' . $this_search_q. '%'; 

$stmt = $db->prepare("SELECT * FROM tbl_tablename WHERE tablecollumn LIKE $search_q"); 
$stmt->execute(); 
0
CREATE PROCEDURE `SP_GENRE_SELECT`(
    IN _Id INTEGER, 
     IN _Name VARCHAR(50), 
     IN _account VARCHAR (50), 
     IN _Password VARCHAR (50), 
     IN _LastConnexionDate DATETIME, 
     IN _CreatedDate DATETIME, 
     IN _UpdatedDate DATETIME, 
     IN _CreatedUserId INTEGER, 
     IN _UpdatedUserId INTEGER, 
     IN _Status TINYINT 
    ) 
BEGIN 
     SELECT * 
     FROM user 
     WHERE Id LIKE _id IS NULL + '%',CAST(_Id AS VARCHAR) 
     AND 
     WHERE Name LIKE _Name IS NULL + '%' ,'%',CONCAT('%',_Name,'%') 
     AND 
     WHERE Account LIKE _Account IS NULL + '%' ,'%',CONCAT('%',_Account,'%') 
     AND 
     WHERE LastConnexionDate LIKE _LastConnexionDate IS NULL + '%' ,'%',CONCAT('%',CAST(LastConnexionDate AS VARCHAR(50),'%')) 
     AND 
     WHERE CreatedDate LIKE _CreatedDate IS NULL + '%' ,'%',CONCAT('%',CAST(_CreatedDate AS VARCHAR(50),'%')) 
     AND 
     WHERE UpdatedDate LIKE _UpdatedDate IS NULL + '%' ,'%',CONCAT('%',CAST(_UpdatedDate AS VARCHAR(50),'%')) 
     AND 
     WHERE CreatedUserID LIKE _CreatedUserID IS NULL +'%' ,'%',CONCAT('%',CAST(_CreatedUserID AS VARCHAR(50),'%')) 
     AND 
     WHERE UpdatedUserID LIKE _UpdatedUserID IS NULL +'%' ,'%',CONCAT('%',CAST(_UpdatedUserID AS VARCHAR(50),'%')) 
     AND 
     WHERE Status LIKE _Status IS NULL + '%' ,'%',CAST(_Status AS VARCHAR(50),'%'); 

END 
相關問題