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

[SOLUCIONADO] separador de decimales en base de datos

Estas en el tema de [SOLUCIONADO] separador de decimales en base de datos en el foro de Mysql en Foros del Web. hola amigos paso a consultarles un asunto que se me planteó en una base de datos tengo una base de datos de un carrito de ...
  #1 (permalink)  
Antiguo 03/08/2010, 08:43
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 3 meses
Puntos: 2
Pregunta [SOLUCIONADO] separador de decimales en base de datos

hola amigos

paso a consultarles un asunto que se me planteó en una base de datos

tengo una base de datos de un carrito de la compra, en la cual hay una tabla 'productos' con una columna 'precio de lista' en la cual están los importes de los productos en formato '7.70' , es decir, decimales separados por puntos y no por comas.

Estoy investigando por google y veo que al parecer MySQL no separa decimales por comas, lo he intentado via phpmyadmin de editar algun precio cambiandole el punto por la coma y me ha dado error . Cabe señalar que la columna 'precio de lista' tiene asignado el formato 'float unsigned'

pues bien, el carrito tiene una funcionalidad en la cual se puede descargar la base de datos en excel, para que los clientes puedan ver los productos, armar presupuestos, etc.

dado que el separador de decimales del campo correspondiente en la tabla es el punto cuando los clientes bajan la misma a excel les aparecen los importes separados por puntos, lo cual no sirve a la hora de utilizar funciones en excel, dado que excel para sumar, multiplicar, etc necesita los valores separados por comas ....

he aquí un problema que se me planteó, pues de alguna manera sería mas conveniente poder cambiarle el formato a ese campo de la tabla donde estan almacenados los importes

Agradezco toda ayuda y orientación respecto al tema
gracias

Martín

Última edición por estudioplateado; 03/08/2010 a las 13:54
  #2 (permalink)  
Antiguo 03/08/2010, 08:56
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: [consulta] separador de decimales en base de datos

estudioplateado

Definitivamente, mysql solo trabaja con el punto como separador decimal.
Creo que mas facil sería que el cliente cambiase su configuración regional y configurara el . como separador decimal. De esa forma no tendrías problemas en excel.

Si nos cuentas mas detalles de la forma que exporta tu aplicación los datos a una hoja de calculo, se podría jugar con funciones como replace y cast para convertir los numeros en el formato que quieras en la hoja de excel.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 03/08/2010, 09:08
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: [consulta] separador de decimales en base de datos

huesos52

gracias por responder

ya tenía en mente lo de la configuración regional, pero me temía que desde el script de php se podía hacer algo para formatear el excel que se baja cada cliente

aqui te paso el script tal cual me pedistes

Código:
<?php

header('Content-type: application/vnd.ms-excel');
header("Content-Disposition: attachment; filename=lista_de_precios.xls");
header("Pragma: no-cache");
header("Expires: 0");

mysql_connect("localhost", "xxxxx", "xxxxxx");
mysql_select_db("xxxxxx");
$sql="select codigo, descripcion, precio_lista, categoria from productos2 order by categoria, descripcion asc";
$res=mysql_query($sql);
mysql_close();
$color=orange;

echo "<table border=1>";
echo "<tr><td colspan=4 align='center'><font color='green'><h1><u>xxxxxxx</u><h1></font><br />
      <h4>xxxxxxxxx</h4>
      <h4>www.xxxxxx.com.ar</h4></td></tr>";
echo "<tr><td colspan=4 align='center'><h3>LISTA DE PRECIOS MAYORISTAS</h3></td></tr>";
echo "<tr><td colspan=4 align='center'>No incluye descuentos ni bonificaciones</td></tr>";
echo "<tr><td bgcolor=$color align='center'>codigo</td>
      <td bgcolor=$color colspan=2>descripcion</td>
	  <td bgcolor=$color align='center'>precio</td>
</tr>";
$categoria="juan_perez";
while($f=mysql_fetch_array($res)){
  if(trim($f[3]) == $categoria){
        $f[1]=utf8_decode($f[1]);
        $f[2]=number_format($f[2],2);
	echo "<tr><td width='90' align='center'>$f[0]</td><td width='400'>$f[1]</td><td align=center width='15'>$</td><td align='center' width='80'>$f[2]</td>";
  }else{
        $f[3]=utf8_decode($f[3]);
        $f[1]=utf8_decode($f[1]);
        $f[2]=number_format($f[2],2);
        echo "<tr><td colspan='4' align='center'><font color='orange'><strong><h3>$f[3]</h3></strong></font></td></tr>";
        echo "<tr><td width='90' align='center'>$f[0]</td><td width='400'>$f[1]</td><td align=center width='15'>$</td><td align='center' width='80'>$f[2]</td>";
        $categoria=trim(utf8_encode($f[3]));
  }
}

echo "<tr><td colspan=4><b>IMPORTANTE: despachos al interior en 24 hs.<br/> Precios sujetos a modificacion sin previo aviso.</td>";
/*
echo "<tr>\n";
echo "<th>Nombre</th>\n";
echo "<th>Email</th>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td><font color=green>Manuel Gomez</font></td>\n";
echo "<td>[email protected]</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td><font color=blue>Pago gomez</font></td>\n";
echo "<td>[email protected]</td>\n";
echo "</tr>\n";
*/
echo "</table>";
?>
  #4 (permalink)  
Antiguo 03/08/2010, 09:22
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: [consulta] separador de decimales en base de datos

En la parte donde haces la consulta, pruebala así:
Código MySQL:
Ver original
  1. codigo,
  2. descripcion,
  3. REPLACE(CAST(precio_lista AS CHAR),'.',',') precio_lista,
  4. categoria
  5. from productos2
  6. order by categoria, descripcion ASC

Puede funcionarte.

Nos cuentas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 03/08/2010, 09:38
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, 4 meses
Puntos: 2658
Respuesta: [consulta] separador de decimales en base de datos

En realidad la clave de todo es la creación del archivo de Excel que planteas al principio. El mismo archivo (si es que es un Excel y no un .CSV puro y duro), contiene a regionalización con que debe interpretarse, por lo que ponerle comas en lugar de puntos puede dar lugar a errores en el cliente.
Cuando programas un aplicación en ASP o .Net, por ejemplo, lo único que necesitas es declarar la regionalización al momento de crear el archivo para que el subprroceso que lo genera almacene en el objeto Excel la información correspondiente. No es problema de cómo se lee ne la base, sino de cómo se arma en el Excel... Lo que habría que ver es cómo se construye en tu caso ese Excel, es decir, qué recursos cuenta la aplicación para generarlo.
Caso contrario, estarás generando Archovs XLS que sólo se podrán leer en regiones es-ES... y ¡guay del que tenga otra cosa!
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 03/08/2010, 09:48
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: [consulta] separador de decimales en base de datos

huesos52:

no me ha funcionado tu recurso de la función REPLACE ,
sigue bajando el excel con importes separados por puntos ...

será que esta incompleta la sintaxis ?

gracias
  #7 (permalink)  
Antiguo 03/08/2010, 09:51
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: [consulta] separador de decimales en base de datos

estudioplateado yo estoy deacuerdo con gnzsoloyo. Así logres cambiar la salida para que la separación sea con comas, un equipo en el que la configuración regional sea diferente va a presentar fallas.

La clave está en la generación del excel y no en la generación de los datos a partir de la consulta.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 03/08/2010, 09:57
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: [consulta] separador de decimales en base de datos

huesos52:

vamos por partes,

no ha funcionado REPLACE .... me dices como puedo hacer que funcione?

segundo :

como manejo entonces la regionalización (como ustedes dicen, la creación del excel) ?

soy nuevo en php + mysql

disculpen la ignorancia

gracias
  #9 (permalink)  
Antiguo 03/08/2010, 10:07
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 1 mes
Puntos: 360
Respuesta: [consulta] separador de decimales en base de datos

Mira esto
http://www.chw.net/foro/lenguajes-de...ional-php.html
es tu mismo problema. la solución no parece muy solida pero es una aproximación.

De igual forma, te recomiendo preguntes en el foro de PHP, este tema ya se sale del manejo de bases de datos.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 03/08/2010, 10:13
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 3 meses
Puntos: 2
Respuesta: [consulta] separador de decimales en base de datos

bien

preguntaré entonces en el foro de PHP

saludos
  #11 (permalink)  
Antiguo 03/08/2010, 13:51
Avatar de estudioplateado  
Fecha de Ingreso: diciembre-2009
Mensajes: 71
Antigüedad: 14 años, 3 meses
Puntos: 2
De acuerdo Respuesta: [SOLUCIONADO] separador de decimales en base de datos

estimados:

ya encontré la solución, meramente había que modificar la función number_format agregándole mas parametros,

quedó de la siguiente manera :

Cita:
Editado: No se permite código de programación en los foros de Base de Datos.
saludos

Última edición por gnzsoloyo; 16/11/2012 a las 09:35
  #12 (permalink)  
Antiguo 16/11/2012, 09:11
 
Fecha de Ingreso: octubre-2012
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: [SOLUCIONADO] separador de decimales en base de datos

Hola Amigo, la función es la siguiente:
Cita:
Editado: No se permite código de programación en los foros de Base de Datos.
Donde la variable $var almacena el registro con la conversión hecha y la variable $valor es el registro que quiero convertir.

Ahora si estas trabajando con Dreamweaver
y deseas implementarla en base al código que este te suele generar, lo puedes hacer de la siguiente manera:


Cita:
Editado: No se permite código de programación en los foros de Base de Datos.
en donde $row_consulta_marco_normativo es el nombre del juego de registro que contiene la consulta a la base de datos y donde ['sueldo_base'] es el nombre del campo en la tabla de la de datos.

Ahora si buscas pasar de decimales a puntos es exactamente lo mismo solo que cambia lo siguiente

Cita:
Editado: No se permite código de programación en los foros de Base de Datos.
o bien

Cita:
Editado: No se permite código de programación en los foros de Base de Datos.

Saludos, espero que te sirva.

Última edición por gnzsoloyo; 16/11/2012 a las 09:35 Razón: Codigo de programación no permitido en este foro, con resucitación de posts obsoletos.
  #13 (permalink)  
Antiguo 16/11/2012, 09:37
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, 4 meses
Puntos: 2658
Respuesta: [SOLUCIONADO] separador de decimales en base de datos

1) No se permite código de programación en los foros de Base de Datos.
2) No se deben resucitar temas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: Ninguno
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.
Tema Cerrado




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