none
Como hacer un like para buscar * y letras en cualquier posición? RRS feed

  • Question

  • Buen dia, esoty tratando de hacer una consulta para buscar en un campo por ejemplo la palabra CASA pero que puede contener el caracter asterisco (*) en reemplazo de una o mas de sus letras asi: CAS*, CA*, C*, *, *A, *AS. ´*ASA.... intente hacer un like pero no me funciona, alguien podria darme un tip y que me tome tambien el caracter vacio para los casos por ejemplo "*A", Gracias.

    Select *
    from tabla
    WHERE tabla.campo1 ='calle'
    and tabla.campo2 = 'carrera' and
     tabla.transporte like  '[c/*][a/*][s/*][a/*]' escape '/'
     

     

    • Edited by sql_ando Wednesday, April 10, 2013 6:31 PM
    • Moved by Naomi N Wednesday, April 10, 2013 6:40 PM Spanish forum
    Wednesday, April 10, 2013 6:29 PM

Answers

  • Si estás buscando un caracter en especial, usa CHARINDEX

    Select *
    from tabla
    WHERE tabla.campo1 ='calle'
    and tabla.campo2 = 'carrera' and
     CHARINDEX( '*', tabla.transporte ) <> 0

    Si no es esto lo que buscas, muestranos algunos datos de ejemplo y el recordset que esperas obtener como resultado.

    SALUDOS !


    Sergio Sánchez Arias
    AYÚDANOS A AYUDARTE

    • Marked as answer by sql_ando Wednesday, April 10, 2013 7:10 PM
    Wednesday, April 10, 2013 6:52 PM
  • Trata con el sgte codigo, pero como dije anteriormente, en este caso sera mas facil si usas Regular Expressions.

    SELECT
    	c1
    FROM
    	(
    	VALUES 
    		('*ASA'), 
    		('CAS*'), 
    		('C*SA'), 
    		('CA*A'), 
    		('CASA'), 
    		('*A'),
    		(''),
    		('*'),
    		('TORCASA'), 
    		('SINSONTE')
    	) AS T(c1)
    WHERE
    	(c1 LIKE '%[C*][A*][S*][A*]%' AND LEN(c1) = 4)
    	OR c1 IN ('', '*');
    GO


    AMB

    Some guidelines for posting questions...


    • Edited by HunchbackMVP Thursday, April 11, 2013 1:07 PM
    • Marked as answer by sql_ando Thursday, April 11, 2013 3:37 PM
    Thursday, April 11, 2013 12:31 AM

All replies

  • Hola si tu longitud siempre será fija, en lugar de usar el comodín *, usa el comodín _ ( guion bajo )

    Pls, Could a moderator move this post to the sql server spanish forum ? http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/threads

    Thks !


    Sergio Sánchez Arias
    AYÚDANOS A AYUDARTE

    Wednesday, April 10, 2013 6:34 PM
  • El * no lo uso de comodin, es un caracter que necesito encontrar en mi campo: 'cas*', 'ca*a', etc.

    Wednesday, April 10, 2013 6:39 PM
  • Si estás buscando un caracter en especial, usa CHARINDEX

    Select *
    from tabla
    WHERE tabla.campo1 ='calle'
    and tabla.campo2 = 'carrera' and
     CHARINDEX( '*', tabla.transporte ) <> 0

    Si no es esto lo que buscas, muestranos algunos datos de ejemplo y el recordset que esperas obtener como resultado.

    SALUDOS !


    Sergio Sánchez Arias
    AYÚDANOS A AYUDARTE

    • Marked as answer by sql_ando Wednesday, April 10, 2013 7:10 PM
    Wednesday, April 10, 2013 6:52 PM
  • Trata:

    SELECT *
    FROM (VALUES ('*ASA'), ('CAS*'), ('C*SA'), ('CA*A'), ('CASA'), ('*A'), ('TORCASA'), ('SINSONTE') ) AS T(c1)
    WHERE c1 LIKE '%[C*][A*][S*][A*]%' OR c1 LIKE '%*A%';
    GO

    Quizas usando Regular Expressions seria mas facil.

    Regular Expressions Make Pattern Matching And Data Extraction Easier
    http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

     


    AMB

    Some guidelines for posting questions...


    Wednesday, April 10, 2013 7:08 PM
  • Hola, no me trae todos los resultados que necesito de esa tabla los cuales serian:

    '*ASA'

    'CAS*'

    'C*SA'

    'CA*A'

    'CASA'

    '*'

    ' ' (Vacio)

    y no serian validas 'TORCASA', 'SINSONTE' porque busco de la misma longitus o menor

    SELECT c1
    FROM (VALUES ('*ASA'), ('CAS*'), ('C*SA'), ('CA*A'), ('CASA'), ('TORCASA'), ('SINSONTE'), ('*'), (' ') ) AS T(c1)
    WHERE c1 LIKE '%[C*][A*][S*][A*]%';
    GO
    
    




    Wednesday, April 10, 2013 8:01 PM
  • Trata con el sgte codigo, pero como dije anteriormente, en este caso sera mas facil si usas Regular Expressions.

    SELECT
    	c1
    FROM
    	(
    	VALUES 
    		('*ASA'), 
    		('CAS*'), 
    		('C*SA'), 
    		('CA*A'), 
    		('CASA'), 
    		('*A'),
    		(''),
    		('*'),
    		('TORCASA'), 
    		('SINSONTE')
    	) AS T(c1)
    WHERE
    	(c1 LIKE '%[C*][A*][S*][A*]%' AND LEN(c1) = 4)
    	OR c1 IN ('', '*');
    GO


    AMB

    Some guidelines for posting questions...


    • Edited by HunchbackMVP Thursday, April 11, 2013 1:07 PM
    • Marked as answer by sql_ando Thursday, April 11, 2013 3:37 PM
    Thursday, April 11, 2013 12:31 AM