none
Extraer palabra entre parentesis RRS feed

  • Pregunta

  • Hola, dentro de la tabla url en el campo Sitio web tengo el siguiente ejemplo de String

    1	30	2	(http://www.meeting.com/exos/255000-259559/259949/norma.htm);[Numero 692/26](http://www.meeting.com/260000-2649/2613/index.htm)
    

    Necesitaria poder extraer las url que estan en los parentecis y mostrarlas con el mismo id una debajo de la
    otro como se muestra abajo

    1	30	2	http://www.meeting.com/exos/255000-259559/259949/norma.htm
    1	30	2	http://www.meeting.com/260000-2649/2613/index.htm
    

    muchas Gracias por la ayuda

    viernes, 23 de junio de 2017 16:39

Respuestas

  • Necesitas separar la cadena en partes basándote en un patrón, yo asumo que todos los literales que representan a una URL terminan con el símbolo de cierre de paréntesis ')'.

    Para separar la cadena en partes existen varias formas si ocupas una versión del motor de base de datos anterior a la versión 2016, en la versión 2016 ya se cuenta con la función STRING_SPLIT()

    - Función

    CREATE FUNCTION dbo.fnSepararCadena(@Texto nvarchar(max), @Separador nvarchar(4000)) 
        RETURNS @T TABLE (Valor nvarchar(max))
    AS
    BEGIN
        DECLARE @XML xml;
        SET @XML = N'<root><r>' + REPLACE(@Texto, @Separador,'</r><r>') + '</r></root>';
    
        INSERT INTO @T(Valor)
        SELECT
    	   r.value('.', 'varchar(max)') AS Item
        FROM 
    	   @XML.nodes('//root/r') AS records(r)
      RETURN
    END

    - Consulta

    SELECT
        t1.Campo1, t1.Campo2, t1.Campo3,
        SUBSTRING(t2.Url, CHARINDEX('(', t2.Url) + 1, 4000) AS URL
    FROM
        Url t1
        CROSS APPLY (SELECT Valor FROM dbo.fnSepararCadena(t1.SitioWeb, ')')) t2 (Url)
    WHERE t2.Url <> '' 
    GO
    

    Deberías obtener algo como:



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 23 de junio de 2017 17:21

Todas las respuestas

  • Necesitas separar la cadena en partes basándote en un patrón, yo asumo que todos los literales que representan a una URL terminan con el símbolo de cierre de paréntesis ')'.

    Para separar la cadena en partes existen varias formas si ocupas una versión del motor de base de datos anterior a la versión 2016, en la versión 2016 ya se cuenta con la función STRING_SPLIT()

    - Función

    CREATE FUNCTION dbo.fnSepararCadena(@Texto nvarchar(max), @Separador nvarchar(4000)) 
        RETURNS @T TABLE (Valor nvarchar(max))
    AS
    BEGIN
        DECLARE @XML xml;
        SET @XML = N'<root><r>' + REPLACE(@Texto, @Separador,'</r><r>') + '</r></root>';
    
        INSERT INTO @T(Valor)
        SELECT
    	   r.value('.', 'varchar(max)') AS Item
        FROM 
    	   @XML.nodes('//root/r') AS records(r)
      RETURN
    END

    - Consulta

    SELECT
        t1.Campo1, t1.Campo2, t1.Campo3,
        SUBSTRING(t2.Url, CHARINDEX('(', t2.Url) + 1, 4000) AS URL
    FROM
        Url t1
        CROSS APPLY (SELECT Valor FROM dbo.fnSepararCadena(t1.SitioWeb, ')')) t2 (Url)
    WHERE t2.Url <> '' 
    GO
    

    Deberías obtener algo como:



    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 23 de junio de 2017 17:21
  • Muchas Gracias funciono perfectamente.
    lunes, 26 de junio de 2017 19:20