Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-08-2016
sevenapp sevenapp is offline
Registrado
 
Registrado: Aug 2016
Posts: 4
Poder: 0
sevenapp Va por buen camino
Question Sumar campo con Puntos y Comas

Buenas.
Necesito sumar los valores de un campo de una base de datos, pero el mismo es de tipo character varying.
como ide estoy usando Lazarus.

intento usando la función sum() pero es para datos numéricos.

Las opciones que tengo son:

1- cambiar el tipo de datos en la db. (El campo es character varying porque contiene números, Punto y Coma)
ej: 2,345.56
desconozco si en postgres hay algún tipo de datos que los contenga y se pueda sumar.

el resultado por medio de un datasource y una Zquery los quiero mostrar en un DBtext o un Label.

Espero su ayuda!!!
Responder Con Cita
  #2  
Antiguo 27-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.659
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿De quién fue la idea de guardar números como texto?
Créate un nuevo campo numérico, pasa los datos convertidos a ese nuevo campo.
Luego borras el campo de texto y renombras el nuevo numérico con el nombre que tenía el viejo de texto.
Responder Con Cita
  #3  
Antiguo 27-08-2016
sevenapp sevenapp is offline
Registrado
 
Registrado: Aug 2016
Posts: 4
Poder: 0
sevenapp Va por buen camino
La tabla se crea importando datos de un txt.

El problema es que me da un error al crear la tabla con el campo numérico.
Por lo q entiendo es porq el valor tiene puntos y comas. Un mismo valor tiene un punto y una coma.
Eh: 3,634.89
Responder Con Cita
  #4  
Antiguo 27-08-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: Sep 2004
Ubicación: En algún lugar.
Posts: 28.659
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues claro que da error, como tiene que ser
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿De quién fue la idea de guardar números como texto?
Créate un nuevo campo numérico, pasa los datos convertidos a ese nuevo campo.
Luego borras el campo de texto y renombras el nuevo numérico con el nombre que tenía el viejo de texto.
Responder Con Cita
  #5  
Antiguo 27-08-2016
sevenapp sevenapp is offline
Registrado
 
Registrado: Aug 2016
Posts: 4
Poder: 0
sevenapp Va por buen camino
Soy nuevo con esto.
"Pasar los datos" a que te referis?

el campo numérico no me acepta datos con ese formato.

cree una tabla nueva con un campo id y un campo numérico y intente cargar un valor asi: 2,567.43 y me da error.

todo lo que necesito es definir el campo para que acepte ese tipo de valores.
Responder Con Cita
  #6  
Antiguo 27-08-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.126
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Agregando algo a lo sugerido por Casimiro, para eliminar esa ',' que te dificulta la conversión, podes hacer:
Código SQL [-]
UPDATE LA_TABLA
SET EL_CAMPO = SUBSTRING(EL_CAMPO FROM 1 FOR POSITION(',', EL_CAMPO) - 1) ||
               SUBSTRING(EL_CAMPO FROM POSITION(',', EL_CAMPO) + 1 FOR CHAR_LENGTH(EL_CAMPO))
El código está probado pero como siempre, te aconsejo hacer un resguardo de la tabla antes de ejecutarlo (reemplazá "LA_TABLA" y "EL_CAMPO" por los nombres que corresponda).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 27-08-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: Dec 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.126
Poder: 30
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Acabo de leer que PostgreSQL tiene la función OVERLAY que podría simplificar la sentencia si soportara cadena vacía en su segundo parámetro...
Pero no puedo probarlo por que no tengo PostgreSQL aquí.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 27-08-2016
sevenapp sevenapp is offline
Registrado
 
Registrado: Aug 2016
Posts: 4
Poder: 0
sevenapp Va por buen camino
Gracias.

No hay una forma de que el campo acepte esos valores del ejemplo?
porque la db es usada por varios sistemas y cambiar los valores del campo puede afectar a otros sistemas que no tengo acceso.

los valores varian, a veces tienen punto y coma, y a veces no ej:

Costo
3,456.23
345.67
8,678.35
34.67

el sistema lo estoy desarrollando en el ide de codeTyphon con la conexión por Zeos.

Explico un poco mas como funciona.

1 - Tomo un archivo txt con los datos.
2 - Creo una tabla para guardar los valores del archivo
3 - Importo los datos del txt a la tabla

Acá el problema. en todas las pruebas, si el campo es numérico sale un error al importar los datos.
Y el segundo problemas, es que la tabla la usan otros sistemas y requieren que el campo contenga los datos con el formato del ejemplo.
Y el tercer problema es que no puedo sumar los valores del campo por no ser numérico

Por eso se me había ocurrido cambiar el tipo de campo pero manteniendo el formato de los valores.

Espero se entienda.

Gracias por las sugerencias!
Responder Con Cita
  #9  
Antiguo 27-08-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: Sep 2004
Ubicación: Medellín - Colombia
Posts: 3.531
Poder: 19
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Guardar numeros como texto es un error garrafal, pero ssi es cierto que otros sistemas dependen de ese error y no puedes correjirlos (que seria lo correcto y aun con la ideas que te den deberias hacerlo, sin dudar), hay 2 formas de hacerlo.

La primera y obvia es ir convirtiendo cada valor en cada consulta que lo necesites. La otra es crear una columna extra, como
Código SQL [-]
Valor_MALHECHOENTEXTO Varchar
Valor_COMODEBESER Numeric

Y creas un trigger que haga la conversion al guardar, y sigues solo usando la columna correcta en tu app (mientras las otras se migran).

Ahora bien, si esa tabla es solo para importar datos y luego transpasar a otras, entonces usas la primera version solamente.
__________________
Nuevo Blog.
Ahora en Twitter!.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Formato de pesos, puntos y comas Yun-i Varios 10 08-03-2008 03:02:51
puntos y comas - decimales Duc API de Windows 7 16-01-2008 18:40:15
comas por puntos pruz API de Windows 4 05-07-2005 23:59:24
Comas o Puntos pruz Varios 1 13-08-2004 21:18:42
comas decimales por puntos Carmelo8 Varios 5 28-11-2003 02:45:23


La franja horaria es GMT +2. Ahora son las 01:12:40.


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