Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Separar cadena de caracteres con Store procedure

Estas en el tema de Separar cadena de caracteres con Store procedure en el foro de SQL Server en Foros del Web. Buenos dias amig@s foristas, necesito de su gran colaboracion, soy nuevo en el mundo de SQL, deseo saber como crear un SP para separa en ...
  #1 (permalink)  
Antiguo 09/10/2014, 09:32
 
Fecha de Ingreso: octubre-2014
Ubicación: Medellín
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Separar cadena de caracteres con Store procedure

Buenos dias amig@s foristas, necesito de su gran colaboracion, soy nuevo en el mundo de SQL, deseo saber como crear un SP para separa en esta cadena de caracteres que solo me quede los correos:
'[email protected]##Receive;vlizarralde@argos .com.co##Receive;[email protected]##Receive;ja [email protected]##Receive;[email protected]## Receive;[email protected]##Receive, Deliver;[email protected]##Receive, Deliver;[email protected]'

tengo este SP que he creado pero no me sale como quiero:
Código SQL:
Ver original
  1. CREATE PROCEDURE SepararEmail @Parametros VARCHAR(1000)
  2. AS
  3. CREATE TABLE #parametros (parametro VARCHAR(1000))
  4. SET NOCOUNT ON
  5. DECLARE @Posicion INT
  6. DECLARE @Parametro VARCHAR(1000)
  7. SET @Parametros = @Parametros + '##Receive'
  8. WHILE patindex('%##Receive%' , @Parametros) <> 0
  9. BEGIN
  10.   SELECT @Posicion =  patindex('%##Receive%' , @Parametros)
  11.   SELECT @Parametro = LEFT(@Parametros, @Posicion - 1)
  12.   INSERT INTO #parametros VALUES (@Parametro)
  13.   SELECT @Parametros = stuff(@Parametros, 1, @Posicion, '')
  14. END
  15. SELECT * FROM #parametros
  16. SET NOCOUNT OFF
  17. GO

Ageadeceria de su gran colaboracion, es muy importante para mi aprender bastante de los que saben...

Última edición por gnzsoloyo; 09/10/2014 a las 10:13
  #2 (permalink)  
Antiguo 09/10/2014, 09:39
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Separar cadena de caracteres con Store procedure

¿Y como viene la cadena?, digo, que datos contiene
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 09/10/2014, 09:48
 
Fecha de Ingreso: octubre-2014
Ubicación: Medellín
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Separar cadena de caracteres con Store procedure

Cita:
Iniciado por iislas Ver Mensaje
¿Y como viene la cadena?, digo, que datos contiene
Islas hola;
Este es el registro que viene del archivo al cual se debe separar:
Código:
[email protected]##Receive;vlizarralde@argos .com.co##Receive;[email protected]##Receive;ja [email protected]##Receive;[email protected]## Receive;[email protected]##Receive, Deliver;[email protected]##Receive, Deliver;[email protected]
debe quedar en una tabla en una columna cada correo que hay en este regsitro

Última edición por gnzsoloyo; 09/10/2014 a las 10:13
  #4 (permalink)  
Antiguo 09/10/2014, 10:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Separar cadena de caracteres con Store procedure

Código SQL:
Ver original
  1. /****** Object:  UserDefinedFunction [dbo].[SplitApplication]    Script Date: 10/19/2010 15:12:35 ******/
  2. SET ANSI_NULLS ON
  3. GO
  4.  
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. CREATE FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(2000))
  9.  
  10. RETURNS @RtnValue TABLE
  11. (
  12. Id INT IDENTITY(1,1),
  13. DATA nvarchar(100)
  14. )
  15. AS
  16. BEGIN
  17. DECLARE @Cnt INT, @SplitOn nvarchar(5)
  18. SET @SplitOn = '##'
  19. SET @Cnt = 1
  20.  
  21. While (Charindex(@SplitOn,@applicationid)>0)
  22. BEGIN
  23. INSERT INTO @RtnValue (DATA)
  24. SELECT
  25. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-1)))
  26.  
  27. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+1,len(@applicationid))
  28. SET @Cnt = @Cnt + 1
  29. END
  30.  
  31. INSERT INTO @RtnValue (DATA)
  32. SELECT DATA = ltrim(rtrim(@applicationid))
  33.  
  34. RETURN
  35. END
  36.  
  37. GO
  38.  
  39.  
  40. how TO USE :
  41.  
  42. SELECT * FROM TABLE WHERE DATA IN (
  43.  
  44. SELECT * FROM SplitApplication('[email protected]##Receive;vlizarralde@argos .com.co##Receive;[email protected]##Receive;ja [email protected]##Receive;[email protected]## Receive;[email protected]##Receive, Deliver;[email protected]##Receive, Deliver;[email protected]')
  45. )

quizas esto te sirva
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 09/10/2014, 10:24
 
Fecha de Ingreso: octubre-2014
Ubicación: Medellín
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Separar cadena de caracteres con Store procedure

Hola Libras; realice la funcion que me envias y me da el mismo resultado del SP que cree:
Id DATA
1 [email protected]
2 #Receive;vlizarralde@argos .com.co
3 #Receive;[email protected]
4 #Receive;ja [email protected]
5 #Receive;[email protected]
6 # Receive;[email protected]
7 #Receive, Deliver;[email protected]
8 #Receive, Deliver;[email protected]

el registro 1 esta bien pero los otrso no se deberia cortar del ";" para que quedara bien todo. no he podido con eso. Gracias
  #6 (permalink)  
Antiguo 09/10/2014, 10:25
 
Fecha de Ingreso: octubre-2014
Ubicación: Medellín
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Separar cadena de caracteres con Store procedure

Hola libras; realice la función que me envías y me da el mismo resultado del SP que cree:
Id DATA
1 [email protected]
2 #Receive;vlizarralde@argos .com.co
3 #Receive;[email protected]
4 #Receive;ja [email protected]
5 #Receive;[email protected]
6 # Receive;[email protected]
7 #Receive, Deliver;[email protected]
8 #Receive, Deliver;[email protected]

el registro 1 esta bien pero los otrso no se deberia cortar del ";" para que quedara bien todo. no he podido con eso. Gracias
  #7 (permalink)  
Antiguo 09/10/2014, 10:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Separar cadena de caracteres con Store procedure

Código SQL:
Ver original
  1. /****** Object:  UserDefinedFunction [dbo].[SplitApplication]    Script Date: 10/19/2010 15:12:35 ******/
  2. SET ANSI_NULLS ON
  3. GO
  4.  
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. ALTER FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(MAX))
  9.  
  10. RETURNS @RtnValue TABLE
  11. (
  12. Id INT IDENTITY(1,1),
  13. DATA nvarchar(MAX)
  14. )
  15. AS
  16. BEGIN
  17. DECLARE @Cnt INT, @SplitOn nvarchar(20)
  18. --SET @SplitOn = '##Receive;'
  19. SET @SplitOn = ';'
  20. SET @Cnt = 1
  21.  
  22. While (Charindex(@SplitOn,@applicationid)>0)
  23. BEGIN
  24. INSERT INTO @RtnValue (DATA)
  25. SELECT
  26. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-(len(@SplitOn)))))
  27.  
  28. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+(len(@SplitOn)),len(@applicationid))
  29. SET @Cnt = @Cnt + 1
  30. END
  31.  
  32. INSERT INTO @RtnValue (DATA)
  33. SELECT DATA = ltrim(rtrim(@applicationid))
  34.  
  35. RETURN
  36. END
  37.  
  38. GO
  39.  
  40.  
  41. how TO USE :
  42.  
  43.  
  44. SELECT
  45. CASE WHEN charindex('##',DATA)>=1 THEN SUBSTRING([DATA],1,charindex('##',DATA)-1) ELSE DATA END AS dato FROM
  46. SplitApplication('[email protected]##Receive;vlizarralde@argos .com.co##Receive;[email protected]##Receive;ja [email protected]##Receive;[email protected]##Receive;[email protected]##Receive Deliver;[email protected]##Receive, Deliver;[email protected]')

Resultado final:

[email protected]
vlizarralde@argos .com.co
[email protected]
ja [email protected]
[email protected]
[email protected]
[email protected]
[email protected]


saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 09/10/2014 a las 10:39
  #8 (permalink)  
Antiguo 09/10/2014, 10:51
 
Fecha de Ingreso: octubre-2014
Ubicación: Medellín
Mensajes: 5
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Separar cadena de caracteres con Store procedure

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. /****** Object:  UserDefinedFunction [dbo].[SplitApplication]    Script Date: 10/19/2010 15:12:35 ******/
  2. SET ANSI_NULLS ON
  3. GO
  4.  
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7.  
  8. ALTER FUNCTION [dbo].[SplitApplication](@applicationid VARCHAR(MAX))
  9.  
  10. RETURNS @RtnValue TABLE
  11. (
  12. Id INT IDENTITY(1,1),
  13. DATA nvarchar(MAX)
  14. )
  15. AS
  16. BEGIN
  17. DECLARE @Cnt INT, @SplitOn nvarchar(20)
  18. --SET @SplitOn = '##Receive;'
  19. SET @SplitOn = ';'
  20. SET @Cnt = 1
  21.  
  22. While (Charindex(@SplitOn,@applicationid)>0)
  23. BEGIN
  24. INSERT INTO @RtnValue (DATA)
  25. SELECT
  26. DATA = ltrim(rtrim(SUBSTRING(@applicationid,1,Charindex(@SplitOn,@applicationid)-(len(@SplitOn)))))
  27.  
  28. SET @applicationid = SUBSTRING(@applicationid,Charindex(@SplitOn,@applicationid)+(len(@SplitOn)),len(@applicationid))
  29. SET @Cnt = @Cnt + 1
  30. END
  31.  
  32. INSERT INTO @RtnValue (DATA)
  33. SELECT DATA = ltrim(rtrim(@applicationid))
  34.  
  35. RETURN
  36. END
  37.  
  38. GO
  39.  
  40.  
  41. how TO USE :
  42.  
  43.  
  44. SELECT
  45. CASE WHEN charindex('##',DATA)>=1 THEN SUBSTRING([DATA],1,charindex('##',DATA)-1) ELSE DATA END AS dato FROM
  46. SplitApplication('[email protected]##Receive;vlizarralde@argos .com.co##Receive;[email protected]##Receive;ja [email protected]##Receive;[email protected]##Receive;[email protected]##Receive Deliver;[email protected]##Receive, Deliver;[email protected]')

Resultado final:

[email][email protected][/email]
vlizarralde@argos .com.co
[email][email protected][/email]
ja [email][email protected][/email]
[email][email protected][/email]
[email][email protected][/email]
[email][email protected][/email]
[email][email protected][/email]


saludos!
Muchisimas gracias Libras, ya me voy a acondicionar la funcion para que funcione de la tabla de donde sale la informacion, si tengo algun problema te estare molestando, ya que como te dije anteriormente soy nuevo en este mundo, pero con toda la disposicion del mundo para aprender
  #9 (permalink)  
Antiguo 10/10/2014, 12:43
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Separar cadena de caracteres con Store procedure

En mi caso, limpiaría la cadena inicial, quitando

Receiver;
Receiver,
Deliver;

Y espacios en blanco

Substituir la cadena de ## por |
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 10/10/2014, 12:44
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Respuesta: Separar cadena de caracteres con Store procedure

En mi caso, limpiaría la cadena inicial, quitando

Receiver;
Receiver,
Deliver;

Y espacios en blanco

Substituir la cadena de ## por |
__________________
MCTS Isaias Islas

Etiquetas: cadena, caracteres, procedure, select, sql, store
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.