Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Problema con las fechas con gambas y postgres
#1

Buenos dias, os cuento un poco.

Utilizo Gambas3 10.16
en una Ubunto 18.04

Este es el código de la función que me falla

Private Sub Busca_Menores_Por_Fechas(Desde As String, Hasta As String)

  AnyDesde = "01/01/" & (Year(Date) - Desde)
  AnyHasta = "31/12/" & (Year(Date) - Hasta)

  CmdSql = ("Select * From \"unidadfamiliar\" where \"nacimiento\" > " & AnyDesde)

  $Consulta = $Con.Exec(CmdSql)

End

Estructura de la Tabla

CREATE TABLE public.usuarios (
    indice integer,
    nombre character varying(150),
    nacionalidad character varying(50),
    documento character varying(11) NOT NULL,
    tipodocumento character varying(11),
    direccion character varying(150),
    sexo character varying(1),
    discapacidad character varying(1),
    nacimiento date
);

Estoy intentando comparar una fecha AnyDesde con el Campo nacimiento de la BDD para obtener los registros que hallan nacido despues de esa fecha pero gambas no me acepta el >.

Alguien de puede ayudar a solucinarlo?
Gracias de antemano.

P.D.
 He probado un gran numero de obciones que aparecen en los foros pero no me funcionan.
    ¡Gracias!
#2

Básicamente no puedes comparar fechas con cadenas. Las fechas son números y necesitas utilizar las funciones de fecha para leer y comparar de la base de datos.

No podemos regresar
    ¡Gracias!
#3

Eso lo se Shordi, lo que no he encontrado es la forma de comparar la fecha de la BDD con una fecha que le proporcione el usuario.
por ejemplo, como encontrar los empleados que se han dado de alta en una empresa desde el 01/01/2000 hasta el 31/12/2020.

Gescias.
    ¡Gracias!
#4

Nunca he usado portgre, por lo que la sintaxis correcta no te la puedo dar sin pasarme de listo pero estoy seguro que postgre tiene su propia batería de funciones de conversión. Algo así como el format(fecha, "dd/mm/yyyy") de gambas. Introduce esas funciones en el Select y te funcionará.

Algo así como
select función_de_conversión_de_postgre(mifecha,"yyyy/mm/dd") as "mifecha" where "mifecha" > "2021/12/27"

Debería funcionar sin problemas

Saludos

No podemos regresar
    ¡Gracias!
#5

(03-05-2021, 17:27)Desoljor escribió:  no he encontrado es la forma de comparar la fecha de la BDD con una fecha que le proporcione el usuario.
por ejemplo, como encontrar los empleados que se han dado de alta en una empresa desde el 01/01/2000 hasta el 31/12/2020.

A ver si esto te ayuda.
Hice una pequeña base de datos en sqlite (ver mas abajo) y logre filtrar de la manera que planteaste. Luego para PostgeSQL adapte la consulta de un mensaje de Stack Overflow para obtener los mismos resultados, pero como no tengo una base postgresql a mano ahora mismo no lo probé.
SQLite
SQL
  1. SELECT * FROM users WHERE born > '1991-01-01' AND born < '1995-05-05';


PostgreSQL
SQL
  1. SELECT * FROM users WHERE born > '1991-01-01'::DATE AND born < '1995-05-05'::DATE;


Tabla de ejemplo en sqlite
SQL
  1. BEGIN TRANSACTION;
  2. CREATE TABLE IF NOT EXISTS "users" (
  3.     "id"    INTEGER,
  4.     "name"    TEXT UNIQUE,
  5.     "born"    NUMERIC,
  6.     PRIMARY KEY("id" AUTOINCREMENT)
  7. );
  8. INSERT INTO "users" VALUES (1,'Usuario1','1991-01-01');
  9. INSERT INTO "users" VALUES (2,'usuario2','1992-02-02');
  10. INSERT INTO "users" VALUES (3,'usuario3','1993-03-03');
  11. INSERT INTO "users" VALUES (4,'usuario4','1994-04-04');
  12. INSERT INTO "users" VALUES (5,'usuario5','1995-05-05');
  13. COMMIT;


Saludos.
    ¡Gracias!
#6

Gracias Shordi.
El problema realmente no está en postgres, de todas maneras da lo mismo el motor de base de datos, Sql es Sql en Mysql o en postgresql.

Si yo cojo y ejecuto esta sentencia desde PgMyadmin (entorno grafico de postgres) directamente funciona perfetamente, pero al pasarla a Gambas es donde Falla.

"Select * From " usuarios " where nacimiento >= '01/01/1900' And nacimiento <= '31/12/1986' And sexo = 'H'"

En esta sentencia le doy una fecha establecida por mi, pero cuando el año de la fecha se obtiene por formulario ya no funciona

Ok tincho lo pruebo y respondo
Gracias

(03-05-2021, 20:41)tincho escribió:  Saludos

Ok tincho lo pruebo y respondo
Gracias
    ¡Gracias!
#7

(03-05-2021, 20:41)Desoljor escribió:  El problema realmente no está en postgres, de todas maneras da lo mismo el motor de base de datos, Sql es Sql en Mysql o en postgresql.
No digo que el problema esté en postgres, digo que tienes que conocer cómo maneja postres las fechas. Sql no es Sql en cualquier base de datos. Todas tienen su peculiaridades y sus dialectos. Por ejemplo, Sqlite no funciona con tipos de datos, sino con afinidad de conversión de los tipos de datos... y todo lo almacena en el disco como texto.

Si yo cojo y ejecuto esta sentencia desde PgMyadmin (entorno grafico de postgres) directamente funciona perfetamente, pero al pasarla a Gambas es donde Falla.
La clave de esto es "entorno gráfico" es decir PgMyadmin hace conversiones de los datos de la BD a tu pantalla, localización geográfica, etc. etc. según qué y cómo se lo plantees. Gambas hace sus propias conversiones según sus propios tipos de datos y tus consultas deben adecuarse a eso.

"Select * From " usuarios " where nacimiento >= '01/01/1900' And nacimiento <= '31/12/1986' And sexo = 'H'"

En esta sentencia le doy una fecha establecida por mi, pero cuando el año de la fecha se obtiene por formulario ya no funciona
No, en esta sentencia le das una cadena de texto y pgMyadmin hace las reconversiones pertinentes. Gambas hace las suyas propias. No te puedo precisar más porque, insisto, no conozco postgre, pero a poco que busques tienes páginas que te pueden orientar, como ésta: https://code.i-harness.com/es/docs/postg...s-datetime

Saludos

No podemos regresar
    ¡Gracias!
#8

Buenas, para la comparación de fechas, que siempre son el problema de los SGBD y creo que del 100% de ellos, lo más efectivo que yo he hecho siempre son dos reglas:
- standarizar que el formato sea el que coincida con el SGBD es decir si la instalación tiene English pues yyyy/mm/dd....o lo correspondiente
- utilizar Between {ini} and {fin} para la comparación en un rango de fechas, porque siempre querrás que sea superior a algo, pero siempre tendrás un límite superior, por ejemplo fecha actual ....fecha actual + 1 year ....etc

Saludos
    ¡Gracias!
#9

Te cuento como lo Hago :  Los Campos para el manejo de Fecha Fecha-Hora siempre los defino de este tipo.
Código:
fecha timestamp without time zone

Al momento nutrir el campo que hace parte de un Registro, ya sea por INSERT o UPDATE

Mi función  que me trae el dato en el formato String  Requerido por Postgresql.
Código:
Parte del SQL  Funciones es un Archivo de Modulo, tú puede crearlo  donde quieras y llamarlo como quieras.....& Funciones.FechaHora(Now()) & ","....
 
Código:
PUBLIC FUNCTION FechaHora(Fecha AS Date) AS String
    
  RETURN "('" & Format$(Fecha, "yyyy-mm-dd hh:nn:ss") & "')"
 
END
 
Código:
Parte del SQL ....& Funciones.FechaHora(TextBoxFecha.Text) & ","....

Ahora, al Momento de Realizar un SELECT
Código:
Date(tu_campo_fecha) >= ('" & Format$(lafecha, "yyyy-mm-dd") & "')

Igual Puedes crear una Función para  hacer fácil .
Código:
Date(tu_campo_fecha) >= " & Fecha(lafecha) &


Archivos adjuntos
.png fecha.png Tamaño: 16.08 KB  Descargas: 6
    ¡Gracias!
#10

Hola ariscolombia, la imagen adjunta que pusiste no se ve.
Saludos.
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)