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

ayuda con consulta en un campo de texto

Estas en el tema de ayuda con consulta en un campo de texto en el foro de Mysql en Foros del Web. HOLA: Soy newbie en este foro y quería saber si alguien podría ayudarme. Necesito alguna sugerencia para saber como ordenar datos de tipo varchar(4) como ...
  #1 (permalink)  
Antiguo 27/01/2006, 20:09
 
Fecha de Ingreso: enero-2006
Mensajes: 18
Antigüedad: 18 años, 2 meses
Puntos: 1
ayuda con consulta en un campo de texto

HOLA: Soy newbie en este foro y quería saber si alguien podría ayudarme. Necesito alguna sugerencia para saber como ordenar datos de tipo varchar(4) como estos:
015
0078
4569
989
012
cómo son de tipo texto si los ordeno con SORT BY nombre_campo, me da esto:
012
015
989
0078
4569
y lo que yo quiero es que se ordenen como si fuesen números, a pesar de los ceros de la izquierda:
012
015
0078
989
4569
Estos números son números de una quiniela, que al principio eran de 3 cifras y luego de 4 cifras por lo tanto no me serviría tratar el campo como INT(4) ZEROFILL ya que cuando los números son de 3 cifras pasarían a ser de 4 cifras. Verdad? o me equivoco?
Sería posible usar alguna función de tratamiento de cadena al campo dentro del WHERE? Cómo se haría esto?
Si alguien tiene alguna sugerencia, le agradezco infinitamente.
  #2 (permalink)  
Antiguo 27/01/2006, 21:04
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Lo único que encontre fue un select similar al tuyo pero rellenando los valores con ceros.
Código PHP:
select LPAD(campo,12,'00000000000000'from tabla order by
LPAD
(campo,12,'0000000000000'limit 10
Ejemplo del resultados con datos:
Código PHP:
+-----------------------------------------------+
 | 
LPAD(card_acceptor_id_42,12,'00000000000000') |
 +-----------------------------------------------+
 | 
000000000026                                  |
 | 
000000000042                                  |
 | 
000000000083                                  |
 | 
000000000273                                  |
 | 
000000000307                                  |
 | 
000000000331                                  |
 | 
000000000448                                  |
 | 
000000000620                                  |
 | 
000000000620                                  |
 | 
000000000794                                  |
 +-----------------------------------------------+
 
10 rows in set (0.01 sec
Referencia: MySQL Lists: mysql: Re: convert varchar/char to integer

Para tu caso, podrías probar lo siguiente:
Código PHP:
select campo from tabla order by
LPAD
(campo,12,'0000000000000'limit 10
De esa forma, debería mostrarte tus datos SIN rellenarlos con ceros a la izquierda, pero al realizar el order by con esa funcion, podría funcionarte.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
  #3 (permalink)  
Antiguo 30/01/2006, 04:41
 
Fecha de Ingreso: enero-2006
Mensajes: 22
Antigüedad: 18 años, 2 meses
Puntos: 0
Otra solucion: CAST(campo AS SIGNED)

Otra posibilidad es realizar un cast en el order by.
La query quedaria de la siguiente forma:

SELECT campo FROM tabla ORDER BY CAST(campo AS SIGNED).

Con esta sentencia estas indicandole que te la ordene teniendo en cuenta el campo como si fuese un entero.
  #4 (permalink)  
Antiguo 31/01/2006, 13:31
 
Fecha de Ingreso: enero-2006
Mensajes: 18
Antigüedad: 18 años, 2 meses
Puntos: 1
Muchas Gracias BrujoNic y desoweb, ahora me voy a probar con sus aportes a ver si me funcionan y luego les cuento que tal me fué...
  #5 (permalink)  
Antiguo 02/02/2006, 19:53
 
Fecha de Ingreso: enero-2006
Mensajes: 18
Antigüedad: 18 años, 2 meses
Puntos: 1
les cuento cómo me fué

Listen to me BrujoNic, le mandé a MySQL la consulta:
Código:
SELECT Numero FROM sorteos ORDER BY LPAD(Numero,4,'0')
pero aún así los números ordenados me salen algo así:
002
0002
0006
006
006
018
0018
099
0099
0100
100
198
0198
198
Me parece que es porque los registros se ordenan además por algún ID interno.¿Será posible que siempre se muestren primero los de 3 cifras y al final los de 4?
Digo... para que haya uniformidad, de esta manera:
002
0002
006
006
0006
018
0018
099
0099
100
0100
198
198
0198
Por lo pronto ya progresé y te agradezco MUCHÍSIMO por haberme orientado.

Con respecto al valioso aporte de desoweb, te agradezco y me lamento mucho, ya que tu idea es buenísima pero la función CAST() fue agregada en la versión 4.0.2 de MySQL y yo tengo instalada la 3.23.49 (me tendré que actualizar supongo), anyway...thank you very much.
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 02:08.