Comunidad de diseño web y desarrollo en internet online

Un detalle con el tipo de dato moneda en MySQL

Citar            
MensajeEscrito el 09 Sep 2009 03:25 pm
Buen dia a todos me ha surgido un detalle que no he podido solucionar, espero puedan orientarme :)

Estoy trabajando con MySQL 5.0.1 y tengo la necesidad de manejar tipos de dato moneda, he definido el campo como DECIMAL(19,4)... mi detalle es el siguiente:

Tengo la siguiente tabla con sus respectivos datos:

Le aplico un ORDER BY tarifa

Código MySQL :

id, tarifa, mts. 3

'090908235911', 25.0000, '1-2-3-4'
'090908235927', 50.0000, '5-6-7-8'
'090908235940', 100.0000, '9-10-11-12'
'090908235948', 1000.0000, '13-14-15'
'090909091828', 10000.0000, '20'


Al aplicar FORMAT y ORDER BY al campo tarifa obtengo:

Código MySQL :

id, tarifa, mts. 3

'090908235948', '1,000.00', '13-14-15'
'090909091828', '10,000.00', '20'
'090908235940', '100.00', '9-10-11-12'
'090908235911', '25.00', '1-2-3-4'
'090908235927', '50.00', '5-6-7-8'


Obviamente porque FORMAT devuelve un tipo de dato cadena.
lo que quiero es poder lograr ordenar correctamente los datos por el campo tarifa despues de aplicado el FORMAT, intente multiplicar por 1 al campo tarifa para forzar la conversion del campo a DECIMAL pero nadamas tocarlo y los resultados cambian a:

Código MySQL :

id, tarifa, mts. 3

'090908235948', 1.00, '13-14-15'
'090909091828', 10.00, '20'
'090908235911', 25.00, '1-2-3-4'
'090908235927', 50.00, '5-6-7-8'
'090908235940', 100.00, '9-10-11-12'


lo mismo sucede si aplico TRUNCATE o divido /1...
Se que puedo hacer un

Código MySQL :

SELECT idtarifa AS id,FORMAT(tarifa,2)AS tarifa,valores AS 'mts. 3' FROM
(SELECT idtarifa,tarifa,valores FROM tbl_tarifa_serv_med ORDER BY tarifa) tmp

pero... alguien sabe una manera mas optima de lograrlo? :oops:

Gracias a todos de antemano...

Por Janhell

25 de clabLevel



 

San Luis Potosi, Mexico

firefox
Citar            
MensajeEscrito el 09 Sep 2009 05:46 pm

Código MySQL :

SELECT 
    idtarifa,
    FORMAT(tarifa, 2) AS moneda, 
    valores 
FROM tbl_tarifa_serv_med 
ORDER BY tarifa 


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 09 Sep 2009 07:11 pm
FORMAT lo estas aplicando en la salida, digo entre el SELECT y el FROM


por tanto el que muestres nada tiene que ver ni con el orden ni con lo que pase despues del FROM

osea, la sencilla consulta de Maikel funciona

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 09 Sep 2009 08:11 pm

Maikel escribió:

Código MySQL :

SELECT 
    idtarifa,
    FORMAT(tarifa, 2) AS moneda, 
    valores 
FROM tbl_tarifa_serv_med 
ORDER BY tarifa 


saludos


:) gracias amigo Maikel he visto tu respuesta asi me ha funcionado, llegue tambien a ese resultado probando varias consultas en el MySQL Query.. tienes razon al darle un alias distinto al campo moneda y hacerle el ORDER BY al campo con el nombre original el orden se aplica tal cual..

Vale, gracias por responder, eres de mucha ayuda... ^^

Por Janhell

25 de clabLevel



 

San Luis Potosi, Mexico

firefox
Citar            
MensajeEscrito el 09 Sep 2009 08:25 pm

Inyaka escribió:

FORMAT lo estas aplicando en la salida, digo entre el SELECT y el FROM


por tanto el que muestres nada tiene que ver ni con el orden ni con lo que pase despues del FROM

osea, la sencilla consulta de Maikel funciona


mmm no amigo, el detalle era que al aplicar el FORMAT(tarifa,2) AS tarifa y posteriormente hace el ORDER BY tarifa, el manejador obviamente (..y tonto de mí) :oops: hacia el FORMAT que arroja un resultado del tipo string y despues iba y hacia el orden a ese mismo string, el resultado era un orden no correspondiente a valores numericos...
Al cambiarle el alias el orden se aplica estrictamente a valores DECIMAL... gracias tambien a ti por responder ;)

Por Janhell

25 de clabLevel



 

San Luis Potosi, Mexico

firefox
Citar            
MensajeEscrito el 09 Sep 2009 09:20 pm
Exacto, es como analizo Janhell.

El interprete de SQL hace la ordenación dando prioridad a los campos seleccionados, luego a los campos de las tablas involucradas. Por eso, en este caso usamos alias.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.