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

[b]seleccionar datos en un string[/b]

Estas en el tema de [b]seleccionar datos en un string[/b] en el foro de SQL Server en Foros del Web. BUEN DIA, TENGO EL SIGUIENTE STRING: partida= |1.23.45.67|2.34.54.3|1.23.45.67|4.22.11.55.22 <--SERIA VB6.0 LUEGO TENGO MI CODIGO EN SQL, EL CUAL ES UN STORED PROCEDURE Código: DECLARE @partida ...
  #1 (permalink)  
Antiguo 07/10/2011, 08:05
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Pregunta [b]seleccionar datos en un string[/b]

BUEN DIA,

TENGO EL SIGUIENTE STRING:

partida= |1.23.45.67|2.34.54.3|1.23.45.67|4.22.11.55.22 <--SERIA VB6.0

LUEGO TENGO MI CODIGO EN SQL, EL CUAL ES UN STORED PROCEDURE
Código:
DECLARE
@partida varchar(20),

---CONTADOR DE PIPE
@posicion int,
@pipe varchar (200),
@pipeout varchar (200),
@monto int,
@cuenta  int,
@fin char(1) 

set @pipe = @partida
set @posicion = 0
set @cuenta = 0
set @fin ='i'
while @fin <>'f'
	begin
	if @posicion = 0
	  begin 
	     select @posicion = charindex('|', @pipe)
                if @posicion <> 0
		   set @cuenta = @cuenta +1
	        end
	else
	   begin
	      select @posicion = charindex('|', @pipe,@posicion+1)			
                if @posicion <> 0
		   set @cuenta = @cuenta +1
	        end
if @posicion = 0
   set @fin = 'f'
END
select @cuenta
select @posicion = charindex('|', @pipe,2)

---BUCLE PARA BUSCAR VALOR ENTRE PIPE E INTRODUCIRLO A LA #TABLA

 DECLARE @contador int
    SET @contador = 0
    WHILE (@contador < @pipe)
    BEGIN
     	SET @contador = @contador + 1
	IF (@contador % 2 = 0)
       	    CONTINUE
    	PRINT 'Iteracion del bucle ' + cast(@contador AS varchar)
    END
LES EXPLICO ESE STRING SE ME GENERA POR VISUAL BASI LUEGO LO LLAMO AL STORED PROCEDURE, EL CONTADOR DE CARACTER ME VA A CONTAR CUANTOS PIPE (|) TIENE MI STRING Y EL WHILE ES PARA QUE ME TOME LOS VALORES QUE ESTAN DENTRO DEL STRING,EL CONTADOR FUNCIONA PERFECTAMENTE .

MI PROBLEMA ESTA EN EL WHILE EL CUAL NO ME TOMA LOS VALORES QUE ESTA DENTRO DE CADA PIPE, EN MI CASO SERIA:

1.23.45.67
2.34.54.3
1.23.45.67
4.22.11.55.22

SI NO QUE ME TOMA TODO EL STRING COMPLETO

|1.23.45.67|2.34.54.3|1.23.45.67|4.22.11.55.22

LOS NECESITO UNO POR UNO POQUE LUEGO SE INTRODUCEN EN UNA #TABLA.

SI ALGUIEN PODRA AYUDARME SE LO AGRADECERE MUCHISIMO....

  #2 (permalink)  
Antiguo 07/10/2011, 08:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: [b]seleccionar datos en un string[/b]

A ver si entendi....quieres meter un digamos conjunto de valores separados por pipes a una tabla de sql??? si es asi, porque no haces mejor un bulk insert o un bcp in? es mejor y mas rapido que estar separando los valores de la cadena y metiendo estos valores a una tabla....


Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 07/10/2011, 08:17
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: [b]seleccionar datos en un string[/b]

Si, los necesito introducir en una tabla temporal de sql porque esos valores se va a agrupar y se les sumaran su monto para este luego llevarlo a un cursor y comprararlos...

A que te refieres con bulk insert o bcp in? Estoy comenzando nunca los habia escuchado.
  #4 (permalink)  
Antiguo 07/10/2011, 08:22
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: [b]seleccionar datos en un string[/b]

Estuve indagando sobre el bull insert y es para sql server 2008 yo trabajo con sql 2005...
  #5 (permalink)  
Antiguo 07/10/2011, 08:41
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: [b]seleccionar datos en un string[/b]

Amiga yamiblancoc actualmente trabajo con servidores sql 2005 y he usado el bulk insert, un bulk insert es meter datos de un archivo de texto a una base de datos y lo mismo hace un bcp in, lo bueno de esto es que puedes meter datos como los de tu caso archivos separados por pipes "|"......pero tienes que tener estos valores en un archivo......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 07/10/2011, 08:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: [b]seleccionar datos en un string[/b]

ya que si no es factible que pongas los datos en un archivo de texto puedes usar el sig codigo :)

Código SQL:
Ver original
  1. DECLARE @partida VARCHAR(MAX)
  2. DECLARE @contador INT
  3. DECLARE @x INT
  4. DECLARE @tama INT
  5. DECLARE @dato VARCHAR(10)
  6. DECLARE @cara VARCHAR(10)
  7.  
  8. CREATE TABLE #temp
  9. (
  10. dato VARCHAR(50)
  11. )
  12. SET @partida= '|1.23.45.67|2.34.54.3|1.23.45.67|4.22.11.55.22'
  13. SET @x=1
  14. SET @tama=len(@partida)
  15. SET @partida=SUBSTRING(@partida,2,@tama)
  16. SET @dato=''
  17. print @partida
  18. while @x<=@tama
  19. BEGIN
  20.     SET @cara=SUBSTRING(@partida,@x,1)
  21.     IF @cara='|'
  22.       BEGIN
  23.        INSERT INTO #temp VALUES (@dato)
  24.        SET @dato=''
  25.       END
  26.     ELSE
  27.        SET @dato=@dato+@cara   
  28.     SET @x=@x+1
  29. END
  30. INSERT INTO #temp VALUES (@dato)
  31. SELECT * FROM #temp
  32. DROP TABLE #temp

Este codigo funciona siempre y cuando tengas un pipe como caracter inicial de tu string :)

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 07/10/2011, 08:50
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: [b]seleccionar datos en un string[/b]

Si tienes toda la razon... Lo que paso fue que la pagina msdn no se cargo completa.... Exactamente los datos tengo que tenerlos en un archivo el cual no los tengo, porque eso es dinamico, me refiero a que en mi sistema en vb 6.0 yo introduzco hoy,mañana y pasado un precompromiso el cual va con un codigo y un monto, y eso varia siempre

partida monto
123..................... 23,00
321.....................100,00
456.....................45,00

entonces visual basic me genera el string

partida: |123|321|456
monto|23|100|45

justamente esos valores que estan en el string tengo que vacialor tal cual a mi tabla temporal en sql, no se si me explique bien?

He estado buscando y vi que puedo utilizar charindez o ascii en el while, no se que me recomiendas tu?

El while es para mientras pipe tenga valor es porque hay datos, en este caso seria

pipe=3

eso quiere decir que tengo tres datos separados por pipe....
  #8 (permalink)  
Antiguo 07/10/2011, 08:57
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: [b]seleccionar datos en un string[/b]

Muuuuuccccchhhhhiiiiissssiiiiiiimmmmmmaaaaaassssss ggggrrrraaacccciiiiaaaaassss!!!!!


Me ayudaste bastante.... De verdad gracias!
  #9 (permalink)  
Antiguo 07/10/2011, 09:06
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: [b]seleccionar datos en un string[/b]

De nada
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 07/10/2011, 10:37
Avatar de yamiblancoc  
Fecha de Ingreso: agosto-2011
Mensajes: 103
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: [b]seleccionar datos en un string[/b]

una preguntica, para agregarle otra columna a la tabla con otro string debo agregarlo otro set con otra variable, correcto?
  #11 (permalink)  
Antiguo 07/10/2011, 12:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: [b]seleccionar datos en un string[/b]

Código SQL:
Ver original
  1. Pues en el ejemplo que te pase quedaria:
  2. DECLARE @partida VARCHAR(MAX)
  3. DECLARE @contador INT
  4. DECLARE @x INT
  5. DECLARE @tama INT
  6. DECLARE @dato VARCHAR(10)
  7. DECLARE @cara VARCHAR(10)
  8.  
  9. CREATE TABLE #temp
  10. (
  11. dato VARCHAR(50),
  12. otro_dato VARCHAR(100)
  13. )
  14. SET @partida= '|1.23.45.67|2.34.54.3|1.23.45.67|4.22.11.55.22'
  15. SET @x=1
  16. SET @tama=len(@partida)
  17. SET @partida=SUBSTRING(@partida,2,@tama)
  18. SET @dato=''
  19. print @partida
  20. while @x<=@tama
  21. BEGIN
  22.     SET @cara=SUBSTRING(@partida,@x,1)
  23.     IF @cara='|'
  24.       BEGIN
  25.        INSERT INTO #temp VALUES (@dato,'aqui el otro dato')
  26.        SET @dato=''
  27.       END
  28.     ELSE
  29.        SET @dato=@dato+@cara    
  30.     SET @x=@x+1
  31. END
  32. INSERT INTO #temp VALUES (@dato,'aqui el otro dato')
  33. SELECT * FROM #temp
  34. DROP TABLE #temp

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

Etiquetas: procedure, select, sql, tabla
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 20:26.