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

Consulta sobre transformar datos en Sql Server 2005

Estas en el tema de Consulta sobre transformar datos en Sql Server 2005 en el foro de SQL Server en Foros del Web. Hola todos, espero que me puedan ayudar con el siguiente problema: necesito realizar un query que me permita transformar una base de datos que poseo ...
  #1 (permalink)  
Antiguo 22/01/2013, 10:21
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Consulta sobre transformar datos en Sql Server 2005

Hola todos, espero que me puedan ayudar con el siguiente problema:

necesito realizar un query que me permita transformar una base de datos que poseo dentro de sql server, los cuales consisten en rut que están en distintos formatos,

algunos de ellos están así: 0123654980,
otros así: 15365498-k,
y otros con menos caractereses decir a 07431565,

lo que necesito es transformar aquellos rut que estan con guion (ejemplo: 12365498-0) en datos en donde se les quite este guión y se anteponga un cero (siguiendo el formato de la primera muestra '0123654980') y aquellos que poseen menos caracteres (07431565) necesito que se les antepongan mas de un cero dependiendo de la cantidad de caracteres que falten para que queden con 10 caracteres todos los rut (es decir( 0007431565)....

Espero que me hayan entendido y que me puedan ayudar, es que estoy recien comenzando a utilizar Sql server 2005 y no me manejo muy bien....

Saludos
  #2 (permalink)  
Antiguo 22/01/2013, 10:46
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Aqui te va un ejemplo, primero quita los caracteres como el punto o el guión con el replace y despues dependiendo del largo agrega los 0 que sean necesarios, pero solo te toma el valor en caso de que el largo sea 10, 9 u 8:

declare @rut nvarchar(20)
set @rut = '17.341.280-0'

select rut = case when len(replace(replace(@rut,'.',''),'-','')) = 9 then '0' + replace(replace(@rut,'.',''),'-','')
else case when len(replace(replace(@rut,'.',''),'-','')) = 8 then '00' + replace(replace(@rut,'.',''),'-','')
else case when len(replace(replace(@rut,'.',''),'-','')) = 7 then '000' + replace(replace(@rut,'.',''),'-','') end end end


o si solo quieres transformar los datos que hay en tu tabla basta con que le hagas un

update tabla set rut = case when len(replace(replace(rut,'.',''),'-','')) = 9 then '0' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 8 then '00' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 7 then '000' + replace(replace(rut,'.',''),'-','') end end end

y listoo...

Última edición por leo_acn; 22/01/2013 a las 10:56
  #3 (permalink)  
Antiguo 22/01/2013, 11:46
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Hola de nuevo, cuando lo ejecuto me corre bien pero no me muestra los resultados a que se puede deber?
  #4 (permalink)  
Antiguo 22/01/2013, 11:54
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Que es lo que estas ejecutando?

Si es el update entonces no te mostrara nada ya que no es una consulta, sino que es una actualizacion, asi que despues del update le haces un select a la tabla y te mostrara los datos modificados.

Saludos
  #5 (permalink)  
Antiguo 22/01/2013, 12:02
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

sii le hago el select a la tabla y me muestra en toda la columna del rut como resultado 'NULL'
  #6 (permalink)  
Antiguo 22/01/2013, 12:10
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

create table prueba(
rut nvarchar(20))

insert into prueba (rut) values ('17.341.280-6')
insert into prueba (rut) values ('1458654-k')
insert into prueba (rut) values ('1458654')
insert into prueba (rut) values ('4582254-K')
insert into prueba (rut) values ('21.585.585-4')
insert into prueba (rut) values ('5896654-k')

update prueba set rut = case when len(replace(replace(rut,'.',''),'-','')) = 9 then '0' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 8 then '00' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 7 then '000' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 6 then '0000' + replace(replace(rut,'.',''),'-','') end end end end

select * from prueba


Funciona perfectamente, ve si tenias datos en la tabla antes de hacer el update!
  #7 (permalink)  
Antiguo 22/01/2013, 12:19
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

revise mis datos y existen a parte de los rut anteriormente mencionados, algunos datos que son nombres en la columna de los rut quizas por eso es que me genera 'NULL'.... ¿cómo puedo quitar esos nombres de la columna?...:/... muchas gracias por la ayuda...=)....
  #8 (permalink)  
Antiguo 22/01/2013, 12:19
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Ya se porque te aparecen como NULL, cuando ejecutas la consulta mas de una vez te los cambia porque no esta el case para cuando te de el largo de 10 como lo quieres, ahora si hazlo todo otra vez con este update y ya no tendrás problemas ;)


update prueba2 set rut = case when len(replace(replace(rut,'.',''),'-','')) = 10 then replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 9 then '0' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 8 then '00' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 7 then '000' + replace(replace(rut,'.',''),'-','')
else case when len(replace(replace(rut,'.',''),'-','')) = 6 then '0000' + replace(replace(rut,'.',''),'-','') end end end end end



Saludos.
  #9 (permalink)  
Antiguo 22/01/2013, 12:22
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: Consulta sobre transformar datos en Sql Server 2005

una forma mas....sencilla? de hacer lo que buscas :)

Código SQL:
Ver original
  1. CREATE TABLE #prueba(
  2. rut nvarchar(20))
  3.  
  4. INSERT INTO #prueba (rut) VALUES ('17.341.280-6')
  5. INSERT INTO #prueba (rut) VALUES ('1458654-k')
  6. INSERT INTO #prueba (rut) VALUES ('1458654')
  7. INSERT INTO #prueba (rut) VALUES ('4582254-K')
  8. INSERT INTO #prueba (rut) VALUES ('21.585.585-4')
  9. INSERT INTO #prueba (rut) VALUES ('5896654-k')
  10.  
  11.  SELECT
  12.  CASE WHEN CHARINDEX('-',rut)>0 THEN SUBSTRING(rut,1,CHARINDEX('-',rut)-1) + REPLICATE('0',len(rut)-CHARINDEX('-',rut)+1) ELSE
  13.  CASE WHEN len(rut)<10 THEN REPLICATE('0',10-len(rut))+ rut
  14.   END
  15.  END dato FROM #prueba

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; 22/01/2013 a las 12:36
  #10 (permalink)  
Antiguo 22/01/2013, 12:33
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

yy para eliminar los nombres puede ser algo asi:

delete from tabla where isnumeric(substring(rut,1,4)) = 0

esto ve si los primeros 4 digitos son números, si no lo son borrará el registro.
Saludos
  #11 (permalink)  
Antiguo 22/01/2013, 12:49
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

muchas gracias....=) saludos
  #12 (permalink)  
Antiguo 23/01/2013, 06:35
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Cita:
Iniciado por leo_acn Ver Mensaje
yy para eliminar los nombres puede ser algo asi:

delete from tabla where isnumeric(substring(rut,1,4)) = 0

esto ve si los primeros 4 digitos son números, si no lo son borrará el registro.
Saludos
Hola oye sabes que ayer cuando aplique este delete me borro todos los datos de la tabla lo aplique tal cual sale ahí y lo hice despues del UPDATE y ahora no puedo recuperar los datos pues al hacer el select me sale la estructura de la tabla pero sin ningún dato... Qué Puedo hacer en tal caso?.... por favor ayuda!!!...=S...=/
  #13 (permalink)  
Antiguo 23/01/2013, 07:37
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

No hiciste todo eso en tu base real o si?
  #14 (permalink)  
Antiguo 23/01/2013, 07:46
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

si hice todo en mi base real...=S....
  #15 (permalink)  
Antiguo 23/01/2013, 08:00
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Bueno, te contare lo que paso, ayer cuando hiciste el primer update te dejo los datos como null, luego con el update nuevo que si funcionaba bien ya no habia nada que hacer porque ya estaban los datos en null, ahora despues al hacer el delete como eran todos null, en vez de numericos, te los borro todos. Ahora la idea es que cada vez que necesites hacer algo nuevo lo hagas en una tabla de prueba porque si algo sale mal se te van a borrar los datos como ahora. Eso si no tengo idea como poder recuperar tus datos, creo que tendras que crear todo otra vez y para la proxima hacete una tabla de prueba donde puedas hacer todas las consultas de prueba antes de hacerlas en la base real, asi te evitas el trabajo extra de tener que reparar las tablas que se afectaron. Saludos
  #16 (permalink)  
Antiguo 23/01/2013, 08:58
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

Hola denuevo mira quiero preguntarte algo.... me salio que con esto podria hacerse puedo consultar con tus conocimientos que tan así puede ser... por favor....

RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY…

<backup_device> a que ser refiere... dentro del concepto de programación
  #17 (permalink)  
Antiguo 23/01/2013, 09:00
 
Fecha de Ingreso: diciembre-2012
Mensajes: 83
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Consulta sobre transformar datos en Sql Server 2005

La verdad no conozco mucho de restaurar una base, mejor esperaa que te ayude otra persona que sepa mas sobre ese tema ;)
  #18 (permalink)  
Antiguo 23/01/2013, 09:14
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: Consulta sobre transformar datos en Sql Server 2005

<backup_device>, do you dont understant what means?....i think no, backup device se refiere a la ubicacion en donde tienes tu bkp, en este caso tu ubicacion en disco o cinta

en este caso:

RESTORE LOG database FROM c:\bkps\log.trn WITH STOPAT =time, RECOVERY…

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #19 (permalink)  
Antiguo 23/01/2013, 09:18
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

gracias...=)
  #20 (permalink)  
Antiguo 24/01/2013, 14:45
 
Fecha de Ingreso: enero-2013
Mensajes: 41
Antigüedad: 11 años, 3 meses
Puntos: 0
Respuesta: Consulta sobre transformar datos en Sql Server 2005

lo anteriormente recomendado me sirvio de mucha ayuda, y muchas gracias son un gran aporte.... y lo felicito por el apoyo....ahora tengo una pequeña duda, como puedo reemplazar valores NULL?, no eliminarlos solo reemplazarlos...espero que me puedan seguir ayudando...=)
  #21 (permalink)  
Antiguo 24/01/2013, 15:42
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: Consulta sobre transformar datos en Sql Server 2005

select isnull(campo,valor a sustituir)

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

Etiquetas: server, sql, transformar
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 16:22.