none
Búsqueda de una cadena con puntos, guiones y comas intermedios RRS feed

  • Pregunta

  • Estoy haciendo una búsqueda de un autor por medio de un procedimiento almacenado, para una base de datos de un centro de información , el problema es el siguiente: 

    En la tabla Biblioteca, el campo de autor, el primer nombre de algunos autores termina con un punto "." y otros no , ejemplo 

    JOSE. PEREZ CHAVEZ y

    JOSE PEREZ CHAVEZ  al enviar una cadena solo me visualiza los autores dependiendo si use o no use punto después del primer nombre y así sucede en algunos casos con los apellidos.

    La base de datos no la debo de modificar. 

    ¿La pregunta es, cómo puedo hacer una búsqueda de JOSE PEREZ CHAVEZ y me envíe todos los autores con ese nombre y que tengan ("."  ,  ","  ,  "-") intermedio:

    JOSE PEREZ CHAVEZ

    JOSE. PEREZ CHAVEZ

    JOSE PEREZ. CHAVEZ

    JOSE PEREZ CHAVEZ. ?????

    ALTER PROCEDURE [dbo].[sp_busqueda_simple]
    @opcion_busqueda int = 0,
    @cadena as nvarchar(500) = ''
    AS
    BEGIN

    SET NOCOUNT ON;


    if @opcion_busqueda = 1

    begin
    SELECT        autor AS Autor, titulo AS Titulo, editorial AS Editorial, RTRIM(f1) + ',' + RTRIM(edicion) AS Expr1, [082] + ',' + [090] AS Clasificacion, RTRIM(ficha) AS Ficha_n
    FROM            CentroDeInformacion
    WHERE        (autor like '' +'% '+ @cadena +'%' + '') 
    GROUP BY autor, titulo, editorial, RTRIM(f1) + ',' + RTRIM(edicion), [082] + ',' + [090], RTRIM(ficha)

    lunes, 3 de septiembre de 2018 22:51

Respuestas

  • Hola AlejandroRomero:

    La opción más fácil, es separar la cadena de entrada en las 3 partes, que buscas.

    CREATE TABLE CentroDeInformacion
    (id        INT IDENTITY(1, 1),
     autor     VARCHAR(200),
     titulo    VARCHAR(100),
     editorial VARCHAR(200)
    );
    GO
    INSERT INTO CentroDeInformacion
    (autor,
     titulo,
     editorial
    )
    VALUES
    ('JOSE PEREZ CHAVEZ',
     'A',
     'B'
    ),
    ('JOSE. PEREZ CHAVEZ',
     'A',
     'B'
    ),
    ('JOSE PEREZ. CHAVEZ',
     'a',
     'b'
    ),
    ('JOSE PEREZ CHAVEZ. ?????',
     'a',
     'B'
    ),
    ('JOSE PEREZ CHAVEZ.',
     'a',
     'B'
    ),
    ('JOE PEREZ CHAVEZ',
     'A',
     'B'
    ); 
    
    /* este no completa el patrón */
    
    GO
    DECLARE @nombre VARCHAR(100)= 'JOSE';
    DECLARE @APELLIDO1 VARCHAR(100)= 'PEREZ';
    DECLARE @APELLIDO2 VARCHAR(100)= 'CHAVEZ';
    SELECT *
    FROM CentroDeInformacion c
    WHERE c.autor LIKE '%'+@nombre+'%'
          AND c.autor LIKE '%'+@APELLIDO1+'%'
          AND c.autor LIKE '%'+@APELLIDO2+'%';
    

    Si esta opción no te gusta, indícanos el motor SQL que estas utilizando, para saber si se puede utilizar SPLIT válido a partir de 2017 o no.

    Un saludo

    martes, 4 de septiembre de 2018 6:19