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

Conservar ceros al al izquierda en varchar

Estas en el tema de Conservar ceros al al izquierda en varchar en el foro de Mysql en Foros del Web. Hola tengo un campo VARCHAR(14) En el he de conservar la referencia de hasta 14 números de unos productos, lo malo es que no son ...
  #1 (permalink)  
Antiguo 26/02/2008, 03:02
 
Fecha de Ingreso: febrero-2008
Mensajes: 3
Antigüedad: 16 años, 2 meses
Puntos: 0
Conservar ceros al al izquierda en varchar

Hola

tengo un campo VARCHAR(14)

En el he de conservar la referencia de hasta 14 números de unos productos, lo malo es que no son de lonjitud fija, uno puede ser "023456789" y otro "01435" ó "567120987", no puedo rellenar de ceros la izquierda ya que es el mismo número del archivo imagen para luego mostrarlo en una página web "023456789.jpg" ó "01435.jpg"

Cuando intento añadirlos desde un formulario, los ceros de la izquierda desaparecen, se supone que VARCHAR al ser de texto debería conservarlos, ¿no?



Bien, esta es mi duda, si hay que hacer algo más para que se conserve el cerillo de la izquierda
Gracias
  #2 (permalink)  
Antiguo 26/02/2008, 06:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Conservar ceros al al izquierda en varchar

Tomado del manual de referencia, muy buena lectura.
Recomiendo consultarlo antes de plantear los problemas, porque muchas soluciones son de manual....

LPAD(str,len,padstr)
Retorna la cadena str, alineado a la izquierda con la cadena padstr a una longitud de len
carácteres. Si str es mayor que len, el valor retornado se acorta a len carácteres.
Cita:
mysql> SELECT LPAD('hi',4,'??');
-> '??hi'
mysql> SELECT LPAD('hi',1,'??');
-> 'h'
RPAD(str,len,padstr)
Retorna la cadena str, alineada a la derecha con la cadena padstr con una longitud de len
carácteres. Si str es mayor que len, el valor de retorno se corta a len carácteres.
Cita:
mysql> SELECT RPAD('hi',5,'?');
-> 'hi???'
mysql> SELECT RPAD('hi',1,'?');
-> 'h'
Esta función trabaja con múltiples bytes.
  #3 (permalink)  
Antiguo 26/02/2008, 09:55
 
Fecha de Ingreso: febrero-2008
Mensajes: 3
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Conservar ceros al al izquierda en varchar

Gracias por responder

Pero mi problema no es al recuperar los datos, es al almacenar los datos.

Yo por medio de un formulario meto lo datos siguientes en la tabla llamada imagen:

02123456
0823456
123456
0124
001236547

y cuando recupero o listo la tabla debería salir esto para que se viesen en la web, pongamos que recupero en la variable $imagen todos los atículos de una característica, estos artículos tienen referencias desde 4 a 14 dígitos según fabricante:

$ver_imagen= $imagen.".jpg";
<img src="<?php echo $ver_imagen; ?>">

02123456.jpg
0823456.jpg
123456.jpg
0124.jpg
001236547.jpg

y me sale esto otro :

2123456.jpg
823456.jpg
123456.jpg
124.jpg
1236547.jpg

Con lo cual de las 5 que he introducido solo veo la que no lleva el 0 delante.

Como dije antes, no son de lonjitud fija, hay desde 4 caracters hasta 14 caracteres, con lo que me propones en tu respuesta el de 4 caracteres lo rtellenaría de ceros por izd. o drch. hasta completar los 14.

Gracias por el interes
  #4 (permalink)  
Antiguo 26/02/2008, 12:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Re: Conservar ceros al al izquierda en varchar

En la aplicación usá campos de caracteres, no campos numéricos ni variables numéricas. Es básico. Exactamente lo mismo que cuando almacenas los números de documento.

Si eso no te resulta suficiente, creá una función de validación que llame a verificar que sólo se hayan ingresado números. Por ejemplo: en VB existe la función Instr() que verifica dentro de un string si existen o no cierto tipo de caracteres. Cuando se la usa así:
Código:
InStr("1234567890", Chr(Keyascii))
devuelve cero si se ingresaron otros tipos de caracteres.
El tema es que las validaciones, al menos las de ese tipo, son por definición responsabilidad de la aplicación, no de la base de datos. Sino estás recargándolé trabajos para los que no está optimizada, como sí lo están los lenguajes de programación.
Nunca te olvides que SQL es un LENGUAJE DE CONSULTAS, no de programación de aplicaciones.


En la base de datos, usá campos CHAR y VARCHAR y cargá los datos con la función LPAD y RPAD.
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 05:13.