none
LIKE + IN RRS feed

  • Pergunta

  • Boa tarde!

    É possivel juntar as funções LIKE e IN?

    Segue abaixo instrução como exemplo:

     

    SELECT NumeroContrato,
    DataHoraAndamento,
    NumeroTelefone,
    Resposta,
    NomeUsuario
    
    FROM Contratos , Andamento_da_Cobranca , Funcionarios
    
    WHERE NumeroContrato = NumeroContrato
    AND NomeUsuario = NomeUsuario
    AND DataHoraAndamento >= '01/07/2011'
    AND NumeroTelefone IS NOT NULL
    
    --- ASSIM FUNCIONA ----
    AND NomeUsuario IN ('João', 'Pedro', 'Maria')
    
    
    --- ASSIM FUNCIONA ----
    AND NomeUsuario LIKE ('%João%')
    AND NomeUsuario LIKE ('%Pedro%')
    AND NomeUsuario LIKE ('%Maria%')
    
    
    --- ASSIM NÃO FUNCIONA, EU PRECISO CONSULTAR VÁRIOS NOMES ALEATÓRIOS POR ISSO NÃO POSSO COLOCAR O
    --- LIKE EM VÁRIAS LINHAS, ELE PRECISA FICAR DENTRO DE UM "IN".
    
    AND NomeUsuario LIKE IN ('%João%', '%Pedro%', '%Maria%')
    

     


    Só queria saber se posso juntar o IN com o LIKE?

    Ou se existe uma outra solução para isso...

     


    quarta-feira, 20 de julho de 2011 17:53

Respostas

  • Infelizmente não existe uma função similar. Você pode usar o OR e agregar vários LIKES, mas dependendo da quantidade de registros, irá afetar o desempenho da sua consulta.

    "Mas a persistência é o que leva a perfeição."
    • Sugerido como Resposta Rafael Godoi Sabadin quinta-feira, 21 de julho de 2011 02:30
    • Marcado como Resposta Eder Costa segunda-feira, 25 de julho de 2011 16:56
    quarta-feira, 20 de julho de 2011 19:14
  • Cardoso,

          Não há como usar o IN e o LIKE juntos. O que vocë pode fazer é o seguinte:

    AND NomeUsuario LIKE '%João%' or NomeUsuario LIKE '%Pedro%' or NomeUsuario LIKE '%Maria%'        Tenha o cuidado de lembrar que o uso do like degrada a performance do seu banco, ainda mais utilizando o caracter curinga (%) no início. Tente utilizar apenas no final...


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
    • Marcado como Resposta Eder Costa segunda-feira, 25 de julho de 2011 16:56
    quinta-feira, 21 de julho de 2011 17:12
    Moderador

Todas as Respostas

  • Infelizmente não existe uma função similar. Você pode usar o OR e agregar vários LIKES, mas dependendo da quantidade de registros, irá afetar o desempenho da sua consulta.

    "Mas a persistência é o que leva a perfeição."
    • Sugerido como Resposta Rafael Godoi Sabadin quinta-feira, 21 de julho de 2011 02:30
    • Marcado como Resposta Eder Costa segunda-feira, 25 de julho de 2011 16:56
    quarta-feira, 20 de julho de 2011 19:14
  • Cardoso,

          Não há como usar o IN e o LIKE juntos. O que vocë pode fazer é o seguinte:

    AND NomeUsuario LIKE '%João%' or NomeUsuario LIKE '%Pedro%' or NomeUsuario LIKE '%Maria%'        Tenha o cuidado de lembrar que o uso do like degrada a performance do seu banco, ainda mais utilizando o caracter curinga (%) no início. Tente utilizar apenas no final...


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
    • Marcado como Resposta Eder Costa segunda-feira, 25 de julho de 2011 16:56
    quinta-feira, 21 de julho de 2011 17:12
    Moderador
  • Eu utilizo o seguinte script:

    DECLARE
    	@CONTRATO	VARCHAR(20),
    	@CONSULTA	VARCHAR(300)
    	
    DECLARE CRS_CUR CURSOR
    FOR
    
    	SELECT CONTRATO FROM TABELA_TESTE WITH(NOLOCK)
    	
    OPEN CRS_CUR
    
    	FETCH NEXT
    		FROM CRS_CUR
    			INTO @CONTRATO
    			
    WHILE @@FETCH_STATUS = 0
    BEGIN
    		
    	SET @CONSULTA = 'INSERT INTO tabela_teste2
    	SELECT CONTRATO_cli FROM tabela_sistema WITH(NOLOCK) WHERE CONTRATO_cli LIKE ''' + @CONTRATO + '%'''
    	
    	EXEC(@CONSULTA)
    	
    	FETCH NEXT
    		FROM CRS_CUR
    			INTO @CONTRATO
    	
    END
    
    CLOSE CRS_CUR
    DEALLOCATE CRS_CUR

    Você criar uma tabela e insere seus registros lá, no caso criei a TABELA_TESTE e também a tabela que irá receber os dados (pode ser uma temporária), eu criei a TABELA_TESTE2.

    A consulta irá buscar todos os dados e armazená-los no cursor.

    É setado na variável @CONSULTA o script que irá buscar os dados que queremos com a cláusula LIKE.

    'INSERT INTO tabela_teste2
    	SELECT CONTRATO_FIN FROM CAD_DEVF WITH(NOLOCK) WHERE CONTRATO_FIN LIKE ''' + @CONTRATO + '%'''

    Executamos o script que está na variável com o comando EXEC (@CONSULTA).

    Com isto será executado o comando de insert junto com o select jogando o dado para a tabela de destino, assim você poderá trabalhar com em outra consulta.

    Sei que o tópico é antigo, mas esta dúvida ocorre muito.

    Abs.

    Tadeu Bonato (WooXTi)


    • Editado Tadeu R Bonato segunda-feira, 29 de julho de 2013 18:35 corrigido
    segunda-feira, 29 de julho de 2013 18:34