[MSSQL] % 포함해서 조회시 조회가 제대로 안됩니다. 0 2 502

by 상똥이 [2020.06.08 11:00:51]


안녕하세요.

현재 상세검색 쿼리를 만들고 있는데 LIKE %를 포함해서 쿼리를 작성하면 

원치 않는 데이터가지 포함되어서 결과가 나옵니다.

왜 안되는걸까요...

 

답변 부탁드리겠습니다.

 

ALTER PROCEDURE [dbo].[USP_SAFETY_PRODUCTION_LIST_SEARCH]
    
    @StartDate VARCHAR(15) = NULL,
    @EndDate VARCHAR(15) = NULL,
    @FinalResult INT = NULL,
    @Query NVARCHAR(100) = NULL

AS    
BEGIN   
    
    SELECT 
        ROW_NUMBER() OVER (ORDER BY SafetyID) AS Num,
        s.SafetyID,
        s.State,
        c.Name as StateName,
        s.Division,
        c2.Name AS DivisionName,
        s.ReceptionNumber,
        s.ReceivingDate,
        s.InspectionSteps,
        c2.Name AS InspectionStepsName,
        a.Region,
        a.Name AS AquaFarmName,
        a.CEO,
        s.Misu,
        s.WaterTankNumber,
        s.QualitativeTest,
        s.WeightAverage,
        s.FinalResult,
        s.Material,
        ISNULL(d.NameKR, '-') AS MaterialName,
    FROM Safety s
    INNER JOIN AquaFarm a
    ON a.AquaFarmID = s.AquaFarmID
    INNER JOIN CommonCode c
    ON c.CommonID = s.State
    INNER JOIN CommonCode c2
    ON c2.CommonID = s.Division
    LEFT OUTER JOIN SafetyThresholdsDetail d
    ON d.DetailID = s.Material
    WHERE CONVERT(VARCHAR(10), s.ReceivingDate, 121)
    BETWEEN CONVERT(DATE, ISNULL(@StartDate, '1900-01-01'), 121) 
    AND CONVERT(DATE, ISNULL(@EndDate, '2100-12-31'), 121)
    AND ( (@FinalResult IS NULL AND @Query IS NULL)
       OR (@FinalResult IS NOT NULL AND FinalResult = @FinalResult)
       OR (@Query IS NOT NULL AND a.Name LIKE '%' + @Query + '%')
    )
    AND s.InspectionSteps = 7000001
    ORDER BY Num DESC

END 

by 마농 [2020.06.08 11:31:22]
SELECT *
  FROM ...
 WHERE s.ReceivingDate >= DATEADD(d, 0, ISNULL(@StartDate, '1900-01-01'))
   AND s.ReceivingDate <  DATEADD(d, 1, ISNULL(@EndDate  , '2100-12-31'))
   AND (  (@FinalResult IS     NULL AND @Query IS     NULL)
       OR (@FinalResult IS NOT NULL AND @Query IS     NULL AND FinalResult = @FinalResult)
       OR (@FinalResult IS     NULL AND @Query IS NOT NULL AND a.Name LIKE '%' + @Query + '%')
       OR (@FinalResult IS NOT NULL AND @Query IS NOT NULL AND FinalResult = @FinalResult
                                                           AND a.Name LIKE '%' + @Query + '%')
       )
   AND s.InspectionSteps = 7000001
;
SELECT *
  FROM ...
 WHERE s.ReceivingDate >= DATEADD(d, 0, ISNULL(@StartDate, '1900-01-01'))
   AND s.ReceivingDate <  DATEADD(d, 1, ISNULL(@EndDate  , '2100-12-31'))
   AND ( (@FinalResult IS NULL) OR (@FinalResult IS NOT NULL AND FinalResult = @FinalResult  ) )
   AND ( (@Query       IS NULL) OR (@Query       IS NOT NULL AND a.Name LIKE '%'+ @Query +'%') )
   AND s.InspectionSteps = 7000001
;

 


by 상똥이 [2020.06.09 09:15:10]

마농님 답변 감사합니다~!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입