Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-06-2010
Taburiente Taburiente is offline
Miembro
 
Registrado: may 2006
Posts: 26
Poder: 0
Taburiente Va por buen camino
Normalizar columna Base datos

Hola a todos,

Nuevamente acudo a vosotros para ver si me podeis ayudar a resolver el siguiente problema:

Tengo una base datos "Interbase" con una tabla llamada "piezas" y en ella una columna llamada "REF" y cuyos datos no son numerico y estan tal com el siguiente ejemplo:

REF
000100-S
085143E
973
1000
X806582-00
2315
BG24204066

Y así hasta unos 20.000 registros, mi problema viene en que ahora dichas referencias deben tener un mínimo de 6 registros, es decir (basándonos en el ejemplo anterior) debo transformar la referencia 973 en 000973 y las que tengan mas de 6 no tocarlas(ejemplo: 085143E), con un administrador de base de datos puedo ir editando una a una todos aquellos registro que deseo pero como son muchos es por lo que acudo a vuestra ayuda para intentar resolver este, para mi, gran problema.

Desde ya les estoy muy agradecido

Un saludo

Taburiente

Última edición por Taburiente fecha: 27-06-2010 a las 10:06:23.
Responder Con Cita
  #2  
Antiguo 28-06-2010
Rockin Rockin is offline
Miembro
 
Registrado: may 2003
Ubicación: Málaga
Posts: 264
Poder: 22
Rockin Va por buen camino
Puedes ir recorriendo cada registro y ver la longitud que tiene, si es menor que 6 le añades y si no pues pasas al siguiente, algo así.

1º) Selecciona todos los registros
2º) los recorres así

Código:
for i:= 1 to num_registros do
begin
     referencia:= TableName.FieldBYname('referencia').AsString //vemos la referencia 


      while Lentgh (referencia < 6) do //mientras sea menor de 6 añadimos un 0
      begin
          referencia:= '0' + referencia
      end;

TableName.nex;
end;
No se que componentes usas de conexión ni nada, pero sería algo así, también pordrías hacerlo con un procedimiento almacenado.

Espero que te sirva de ayuda
Responder Con Cita
  #3  
Antiguo 30-06-2010
Taburiente Taburiente is offline
Miembro
 
Registrado: may 2006
Posts: 26
Poder: 0
Taburiente Va por buen camino
Gracias Rockin por tu repuesta, en algo como eso había también yo pensado, lo que si quería saber es si seria posible normalizar dicha columna con alguna sentencia sql o algo por el estilo y utilizando algún administrador de base de datos (EMS sql manager por ejemplo).

Saludos




PD: he tenido bastantes problemas para entrar en esta pagina porque mi navegador decia que este sito es potencialmente peligroso y no me dejaba entrar
Responder Con Cita
  #4  
Antiguo 01-07-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
Resp

Código SQL [-]
/*Declara estas dos funciones*/
DECLARE EXTERNAL FUNCTION lpad 
  CSTRING(255), INTEGER, CSTRING(1)
  RETURNS CSTRING(255) FREE_IT
  ENTRY_POINT 'IB_UDF_lpad' MODULE_NAME 'ib_udf';

DECLARE EXTERNAL FUNCTION strlen 
  CSTRING(32767)
  RETURNS INTEGER BY VALUE
  ENTRY_POINT 'IB_UDF_strlen' MODULE_NAME 'ib_udf';

/*esto es para que pruebes como te quedarian los datos*/
Select Case
         When (strlen(Ref) < 6) Then Lpad(Ref, 6, '0')
         Else Ref
       End As Ref
From Piezas

/*Aqui arreglas tu base de datos*/
Update Piezas Set
       Ref =  Lpad(Ref, 6, '0')
Where strlen(Ref) < 6
Espero te funcione
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
  #5  
Antiguo 01-07-2010
Taburiente Taburiente is offline
Miembro
 
Registrado: may 2006
Posts: 26
Poder: 0
Taburiente Va por buen camino
Gracias rastafarey, eres un genio, dime a donde te mando las cervezas, jejejeje



Saludos
Responder Con Cita
  #6  
Antiguo 05-07-2010
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

Bueno espero te haya funcionado.
Las cervezas me las debes.
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
como normalizar audio en tiempo real? omicronanime Varios 6 14-04-2009 16:35:52
No repetir datos en una columna edusus Conexión con bases de datos 3 23-04-2006 18:24:51
Suma de Datos de Columna en paradox gersongelabert Tablas planas 2 14-08-2005 06:20:37
Levantar Datos de Columna en Grid lionsoft Varios 6 28-03-2005 19:50:06
Columna calculada en base a otra columna calculada Al González Firebird e Interbase 1 09-02-2004 23:51:57


La franja horaria es GMT +2. Ahora son las 01:33:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi