Использование оператора LIKE с параметрами хранимой процедуры
У меня есть хранимая процедура, которая использует оператор LIKE
для поиска местоположения грузовика среди некоторых других параметров
@location nchar(20),
@time time,
@date date
AS
select
DonationsTruck.VechileId, Phone, Location, [Date], [Time]
from
Vechile, DonationsTruck
where
Vechile.VechileId = DonationsTruck.VechileId
and (((Location like '%'+@location+'%') or (Location like '%'+@location) or (Location like @location+'%') ) or [Date]=@date or [Time] = @time)
Я обнуляю другие параметры и выполняю поиск только по местоположению, но он всегда не возвращает результатов, даже если я использовал полное имя местоположения
3 ответа:
Ваш тип данных для
@location nchar(20)
должен быть@location nvarchar(20)
, так как nChar имеет фиксированную длину (заполняется пробелами).
Если расположение данных nchar тоже вы будете иметь, чтобы преобразовать его:... Cast(Location as nVarchar(200)) like '%'+@location+'%' ...
Для включения nullable параметров с условием и
Например, если вы хотите сравнить местоположение, дату и время.AND
просто используйте IsNull или Coalesce для сравнения, что не требуется в вашем примере с использованиемOR
.@location nchar(20), @time time, @date date as select DonationsTruck.VechileId, Phone, Location, [Date], [Time] from Vechile, DonationsTruck where Vechile.VechileId = DonationsTruck.VechileId and (((Location like '%'+IsNull(@location,Location)+'%')) and [Date]=IsNUll(@date,date) and [Time] = IsNull(@time,Time))