Se puede hacer esto en una consulta?

15/10/2009 - 20:49 por Sonia | Informe spam
Tengo una tabla con los datos:

ID, Nombre,Apellidos,email,Telefono

Un ejemplo seria:

1-Miguel-Gutierrez-mgutierrez@mail.com-9561111111
2-Jaime-Sanchez-jsanchez@gmail.com-745856123
3-Sonia-Perez-sperez@mail.com;soniap@mail.com-45895631
4-Miguel-Sanchez-msanchez@mail.com-9561111111
5-Silvia-Sanchez-sanchez@mail.com ssa@mail.com-5656656565

Los registros 1,2,4 estan correctos
El registro 3 tiene dos direcciones de email separados por ;
El registro 5 tienes dos direcciones de email separador por espacio.

Se puede deparar los registros 3 y 5 y que quede de la manera:

-Miguel-Gutierrez-mgutierrez@mail.com-9561111111
2-Jaime-Sanchez-jsanchez@gmail.com-745856123
3-Sonia-Perez-sperez@mail.com-45895631
4-Sonia-Perez-soniap@mail.com-45895631
5-Miguel-Sanchez-msanchez@mail.com-9561111111
6-Silvia-Sanchez-sanchez@mail.com-5656656565
7-Silvia-Sanchez-ssa@mail.com-5656656565

GRACIAS!!!

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
15/10/2009 - 22:29 | Informe spam
Sonia, deberias usar Expresiones regulares para hacerlo de forma simple, si
usas sql 2005 / 2008 podes armarte una funcion de CLR



Maxi Accotto
MVP en SQL Server
http://blog.maxiaccotto.com

"Sonia" wrote in message
news:
Tengo una tabla con los datos:

ID, Nombre,Apellidos,email,Telefono

Un ejemplo seria:



;



Los registros 1,2,4 estan correctos
El registro 3 tiene dos direcciones de email separados por ;
El registro 5 tienes dos direcciones de email separador por espacio.

Se puede deparar los registros 3 y 5 y que quede de la manera:









GRACIAS!!!

Respuesta Responder a este mensaje
#2 Carlos M. Calvelo
16/10/2009 - 00:26 | Informe spam
Hola Sonia,

On Thu, 15 Oct 2009 20:49:37 +0200, Sonia wrote:

Tengo una tabla con los datos:

ID, Nombre,Apellidos,email,Telefono

Un ejemplo seria:



;



Los registros 1,2,4 estan correctos
El registro 3 tiene dos direcciones de email separados por ;
El registro 5 tienes dos direcciones de email separador por espacio.

Se puede deparar los registros 3 y 5 y que quede de la manera:









GRACIAS!!!



Aquí de dejo una solución.

Esta es una tabla ejemplo con los datos que tu has puesto:
-
DECLARE @T TABLE(
ID INT,
Nombre VARCHAR(50),
Apellidos VARCHAR(50),
email VARCHAR(100),
Telefono VARCHAR(50)
)
;

INSERT @T
SELECT 1,'Miguel','Gutierrez','','9561111111'
UNION
SELECT 2,'Jaime','Sanchez','','745856123'
UNION
SELECT 3,'Sonia','Perez',';','45895631'
UNION
SELECT 4,'Miguel','Sanchez','','9561111111'
UNION
SELECT 5,'Silvia','Sanchez',' ','5656656565'
;

SELECT * FROM @T
;
-


-
WITH A AS (
SELECT *, CHARINDEX(';',REPLACE(email,' ',';')) pos FROM @T
),
B AS (
SELECT
ID, Nombre, Apellidos,
CASE
WHEN pos=1 THEN ''
WHEN pos>1 THEN LEFT(email,pos-1)
ELSE email
END email,
telefono, pos
FROM A
UNION ALL
SELECT
A.ID, A.Nombre, A.Apellidos,
CASE
WHEN CHARINDEX(';',A.email,B.pos+1)>0
THEN SUBSTRING(A.email,B.pos+1,
CHARINDEX(';',A.email,B.pos+1)-B.pos-1)
ELSE RIGHT(A.email,LEN(A.email)-B.pos)
END email,
A.telefono,
CHARINDEX(';',A.email,B.pos+1) pos
FROM A JOIN B ON A.ID=B.ID
WHERE B.pos>0
)
SELECT ROW_NUMBER() OVER (ORDER BY ID) AS NuevoID,
ID,Nombre,Apellidos,email, Telefono
FROM B;

Saludos,
Carlos
Respuesta Responder a este mensaje
#3 Alejandro Mesa
16/10/2009 - 01:02 | Informe spam
Sonia,

Cual es la version de SQL Server que usas?

La idea es partir esa lista y devolver una tabla donde cada fila corresponde
con un elemento de la lista.

Ahora, que metodo usar para particionar la lista?

En este articulo se comparan diferentes formas de hacerlo. De acuerdo a tu
ambiente y version de SQL Server, podras escojer el que mejor se adapte a tus
necesidades.

Aqui te pongo una forma rapida de hacerlo, mediante el uso de xml.

use tempdb;
go

declare @t table (
ID int not null,
Nombre varchar(50),
Apellidos varchar(50),
email varchar(1024),
Telefono varchar(35)
);

insert into @t values(1, 'Miguel', 'Gutierrez', '',
'9561111111');
insert into @t values(2, 'Jaime', 'Sanchez', '',
'745856123');
insert into @t values(3, 'Sonia', 'Perez',
';', '45895631');
insert into @t values(4, 'Miguel', 'Sanchez', '',
'9561111111');
insert into @t values(5, 'Silvia', 'Sanchez', '
', '5656656565');

select
*
from
@t as T
outer apply
(
select
A.email
from
(select CAST('<row>' + REPLACE(REPLACE(T.email, ' ', ';'), ';',
'</row><row>') + '</row>' as xml)) as S(x)
cross apply
(select N.e.value('.', 'varchar(256)') as email from
S.x.nodes('/row') as N(e)) as A
) as E(email)
order by
ID,
Telefono;
go


Arrays and Lists in SQL Server
http://www.sommarskog.se/arrays-in-sql.html


AMB



"Sonia" wrote:

Tengo una tabla con los datos:

ID, Nombre,Apellidos,email,Telefono

Un ejemplo seria:



;



Los registros 1,2,4 estan correctos
El registro 3 tiene dos direcciones de email separados por ;
El registro 5 tienes dos direcciones de email separador por espacio.

Se puede deparar los registros 3 y 5 y que quede de la manera:









GRACIAS!!!

Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
16/10/2009 - 01:10 | Informe spam
Hola Alejandro,

On Thu, 15 Oct 2009 16:02:01 -0700, Alejandro Mesa wrote:


Aqui te pongo una forma rapida de hacerlo, mediante el uso de xml.




Tu con tu XML... que pareja! :) :)

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida