0

私の列 ServicetTypeIDs には次のデータが含まれています。以下の where 句を使用して値を検索します。パラメーター @ServiceTypes = 1,9 の場合、両方の 1,9 が存在する場合にのみレコードが返されるとしましょう。1, 9 を含むレコード、または 1,9 自体を含むレコードを返したいと考えています。私のwhere句が正しくありません。助けてください

column
1
NULL
9
1
4,7
1,9

 WHERE
( @ServiceTypes is null or       
   charindex(','+SEP.ServiceTypeIDs+',',      
   ','+@ServiceTypes+',') > 0)))
4

1 に答える 1

0

'1,9' select ('1','9','1,9') が必要な場合は、ここに短い条件があります

where (@ServiceTypes is null) or (','+@ServiceTypes+',' like '%,'+ServiceTypeIds+',%')

ただし、'4,9' の場合は ('9') のみが選択されます。このマスクの ('4,7','1,9','9') を取得する場合の条件は次のとおりです。

where (@ServiceTypes is null) 
      or 
      (','+ServiceTypeIds+',' like ',%'+SUBSTRING(@ServiceTypes,1,charindex(',',@ServiceTypes)-1)+',%')
      or
      (','+ServiceTypeIds+',' like ',%'+SUBSTRING(@ServiceTypes,charindex(',',@ServiceTypes)+1,1000)+',%') 
于 2012-07-30T07:59:13.420 に答える