web-dev-qa-db-ja.com

ストアドプロシージャのパラメーターで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)

私は他のパラメータを無効にし、場所のみで検索しますが、場所のフルネームを使用しても常に結果が返されません

15
Scarnet

NCharは固定長(スペースで埋められている)であるため、@location nchar(20)のデータ型は@location nvarchar(20)である必要があります。
Locationがncharでもある場合は、変換する必要があります。

 ... Cast(Location as nVarchar(200)) like '%'+@location+'%' ...   

And AND条件でnull値を許可するパラメーターを有効にするには、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))
32
bummi

私は同じに取り組んでいました。以下のステートメントを確認してください。私のために働いた!!


SELECT * FROM [Schema].[Table] WHERE [Column] LIKE '%' + @Parameter + '%'
2
Singh T