Где не работает операторы like и not like - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть этот запрос:

SELECT 
DISTINCT 
REPLACE(REPLACE(A.[NOME COMERCIAL],'.',''),'&','') AS [NOME COMERCIAL]        ,
ISNULL(A.[PLANO], '') AS PLANO       ,
A.[Plano Foco]        ,
CONVERT(DECIMAL(18,2),A.[PRECO]) AS PRECO        ,
B.[FEAT_CAMERA]        ,
B.[FEAT_TELA]        ,
B.[FEAT_CAP_ARMAZENAMENTO]        ,
B.[FEAT_PROCESSADOR]        ,
B.[FEAT_MEMORIA_RAM]        ,
B.[FEAT_BATERIA]        ,
B.[EXTRA_INFO_1]        ,
B.[EXTRA_INFO_2]        ,
B.[EXTRA_INFO_3]  
FROM [TABELA DE PRECOS] AS A
LEFT JOIN DE_PARA_SAP_APARELHOS AS B
  ON (A.[NOME DPGC] = B.APARELHODPAV)
WHERE PLANO LIKE '%CONTROLE%'
  AND PLANO NOT LIKE '%Renova%'
  AND A.[PRODUTO] IN ('Smartphone', 'Blackbox 3G', 'Blackbox 4G', 'Fixo', 'Modem 3G', 'Modem 4G', 'Tablet')
  AND REPLACE(REPLACE(REPLACE(A.[NOME DPGC],'&',''),'''',''),'.','') = 'Iphone XR 64GB' 
   OR REPLACE(REPLACE(REPLACE(B.[APARELHODPAV],'&',''),'''',''),'.','') = 'Iphone XR 64GB'
  AND A.[REGIAO] = '7x'
ORDER BY PRECO,[PLANO]  

Я немного искал и обнаружил, что если у вас есть нулевые значения, LIKE и NOT LIKE не могут работать должным образом, поэтому я использую ISNULL. Но я все еще получаю значения, которые содержат «Ренова»:

Novo Vivo V (Renova)
Novo Vivo V
Vivo Família 70GB (Renova)
Vivo Família 50GB (Renova)
Vivo Família 70GB
Vivo Controle....

Я не получаю никаких сообщений об ошибках. Запрос работает нормально, но это похоже на то, что операторы типа like, а не like игнорируются или что-то в этом роде. Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если вы не хотите включать Renova, не включайте его в положение where, и оно будет освобождено от выбора.Это решит вашу проблему.

0 голосов
/ 12 ноября 2018

скобки отсутствуют в операторе OR:

SELECT DISTINCT REPLACE(REPLACE(A.[NOME COMERCIAL],'.',''),'&','') AS [NOME COMERCIAL]        ,
                ISNULL(A.[PLANO], '') AS PLANO       ,
                A.[Plano Foco]        ,
                CONVERT(DECIMAL(18,2),A.[PRECO]) AS PRECO        ,
                B.[FEAT_CAMERA]        ,
                B.[FEAT_TELA]        ,
                B.[FEAT_CAP_ARMAZENAMENTO]        ,
                B.[FEAT_PROCESSADOR]        ,
                B.[FEAT_MEMORIA_RAM]        ,
                B.[FEAT_BATERIA]        ,
                B.[EXTRA_INFO_1]        ,
                B.[EXTRA_INFO_2]        ,
                B.[EXTRA_INFO_3]  
FROM @A AS A 
    LEFT JOIN @B AS B  ON 
    A.[NOME DPGC] = B.APARELHODPAV
WHERE   PLANO LIKE '%CONTROLE%'  AND 
        PLANO NOT LIKE '%Renova%'  AND 
        A.[PRODUTO] IN ('Smartphone', 'Blackbox 3G', 'Blackbox 4G', 'Fixo', 'Modem 3G', 'Modem 4G', 'Tablet')  AND 
        (REPLACE(REPLACE(REPLACE(A.[NOME DPGC],'&',''),'''',''),'.','') = 'Iphone XR 64GB' OR REPLACE(REPLACE(REPLACE(B.[APARELHODPAV],'&',''),'''',''),'.','') = 'Iphone XR 64GB') AND 
        A.[REGIAO] = '7x' 
ORDER BY PRECO,[PLANO]  
...