2016-01-27 1 views
0

Есть ли что-то эквивалентное LIKE, которое мы используем с varchar, которое может использоваться с int?SQL LIKE с int

Я хочу, чтобы фильтр с тремя parameters, два из них varchar, так что я могу использовать LIKE и в случае, если я получаю пустую строку я все еще могу получить все записи. Но как я могу добиться нечто подобное с int

Я хочу, чтобы получить даже если fkProductTypeID не существует: Это мой запрос:

select * from Product 
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' 
AND fkProductTypeID = @ptype 

Я хочу, чтобы иметь возможность получить результаты, даже если Я поставляю идентификатор, который не существует. От переднего конца, если я прохожу «» в @code» 'в @name и 0 в @ptype Я хочу, чтобы получить все записи

+1

Вы можете просто бросить Int к VARCHAR, прежде чем использовать его. т.е.: 'DECLARE @strInt varchar (20); SET @strInt = CAST (@intVal AS varchar (20) ' – mikeyq6

+0

Если вы передаете имя и тип, вы можете переоценить добавленное значение частичного кода. –

ответ

2

Вы могли бы использовать это:

select * from Product 
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' 
AND (@ptype IS NULL OR fkProductTypeID = @ptype) 

, если это в запасенной процедура, которую вы должны использовать IF ... ELSE:

CREATE PROCEDURE dbo.SP_Name(@ptype int, @code varchar(1000), @name varchar(1000)) 
AS 
BEGIN 
    IF @ptype IS NULL 
    BEGIN 
     select * from Product 
     where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' 
    END 
    ELSE 
    BEGIN 
     select * from Product 
     where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' 
     AND fkProductTypeID = @ptype 
    END 
END 
+0

Поэтому мне нужно передать' null' из ' front-end' вместо нуля? –

+0

@Stackuser: если это 0, вы можете использовать '(@ptype = 0 ИЛИ fkProductTypeID = @ptype)' –

+0

Да работает! Просто нужно правильно использовать логические операторы! Я решаю это сам? В любом случае спасибо –

1

Является ли это то, что вы хотите?

select * 
from Product 
where Code like '%'+ @code +'%' AND name LIKE '%'+ @name +'%' AND 
     (fkProductTypeID = @ptype or @ptype is null); 

Значение '' не имеет смысла для целого числа. И, не смешивайте типы для сравнения. Для этого используйте NULL.

+2

Typo: должно быть 'или @ptype равно null ', а не' и'. –

0

Его можно таким образом

select * from Product 
where CASE WHEN @code>0 THEN Code ELSE 0 END like '%'+ @code +'%' 

AND name LIKE '%'+ @name +'%' 
AND fkProductTypeID = @ptype