2013-07-17 2 views
2

저장 프로 시저의 변수를 사용하여 LIKE 문을 올바르게 사용할 수 없습니다. 전달 된 변수로 시작하는 테이블의 모든 행을 찾고 싶습니다.Like 문에서 저장 프로 시저 변수 사용

현재 @id 값이 저장 프로 시저에 전달 된 값이 nvarchar(20) 인 다음 쿼리를 사용하고 있습니다. ID가 완전히 일치해도 올바르게 작동하지만 '%'을 제대로 사용하지 않습니다. 이 작업을 수행하는 적절한 방법은 무엇입니까?

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

'id'는 문자열 (또는 varchar, text 등의 문자열) 또는 정수 (bigint, int 등)입니까? –

+0

잘 작동해야합니다. – Lamak

답변

4

이 나를 위해 작동합니다 @id가 null의 경우

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

Sql Fiddle DEMO

+0

문제가 해결되었습니다. 좋아하는 것은 잘못이 아니 었습니다. 그래도 도와 ​​줘서 고마워! – AToya

0

쿼리가 작동하지 않습니다. 따라서 @id이 null 인 경우 빈 문자열로 설정할 수 있습니다. 쿼리에 대한 작업을해야 다음 행을 추가, 당신의 절차에 따라서

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(); 

또는

$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