Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQLite3 devuelve 01-01-1899 (https://www.clubdelphi.com/foros/showthread.php?t=66046)

salvica 29-01-2010 17:43:45

SQLite3 devuelve 01-01-1899
 
Estoy intentando que una consulta me formatee las fechas NULL como 01-01-1970, para ello, dentro de una consulta, hago lo siguiente:
Código SQL [-]
       ...
       ( CASE WHEN FECHA ISNULL
              THEN STRFTIME("%d-%m-%Y", DATE("01-05-1970"))
              ELSE STRFTIME("%d-%m-%Y", FECHA)
         END
       ) AS F_NULA,
       ...
He probado a poner la fecha todas las variantes posibles y siempre obtengo el mismo resultado: 01-01-1899

¿Sabeis como se hace?
Saludos
salvica

Al González 29-01-2010 20:53:24

Cita:

Empezado por salvica (Mensaje 352278)
Código SQL [-]
       ...
       ( CASE WHEN FECHA ISNULL
              THEN STRFTIME("%d-%m-%Y", DATE("01-05-1970"))
              ELSE STRFTIME("%d-%m-%Y", FECHA)
         END
       ) AS F_NULA,
       ...
He probado a poner la fecha todas las variantes posibles y siempre obtengo el mismo resultado: 01-01-1899

No sé si tenga que ver que en lugar de "IS NULL" estás escribiendo "ISNULL" (desconozco si SQLite lo permite de la segunda forma), pero podría ser también que el campo Fecha contenga un valor que no es nulo.

Por cierto, ¿dónde estás observando que aparece la fecha "01-01-1899"? ¿Qué programa utilizas para probar las consultas SQL antes de llevarlas a Delphi? (suponiendo que en todo esto usas Delphi :p).

Cabe mencionar que la fecha "0" es el 30/12/1899, por tanto pareciera como si tu campo tuviese un valor que como número es -363.

Saludos.

Al González.

salvica 29-01-2010 23:57:55

Hola Al González, gracias por contestar.

Exáctamente la fecha que devuelve es la que tú dices 30-12-1899 :mad::mad::mad: (se conoce que equivoqué al copiarla)

Para el desarrollo utilizo Delphi7/Zeos/SQLite3 y para "cotorrear" las salidas y probar las consultas utilizo Sqlite Code Factory.

Los campos en los que aparece esa fecha estan a NULL y me lo hace lo mismo Delphi que Code Factory.

La documentación de SQLite pone como palabra clave ISNULL (todo junto), aparte que lo utilizo con otros campos y funciona correctamente.

Saludos
salvica

salvica 03-02-2010 11:56:55

Me he dado cuenta, que todos los valores erróneos provienen del resultado de hacer LEFT JOIN sobre la tabla en cuestión
Código SQL [-]
       ...
       ( CASE WHEN FECHA ISNULL
              THEN STRFTIME("%d-%m-%Y", DATE("01-05-1970"))
              ELSE STRFTIME("%d-%m-%Y", FECHA)
         END
       ) AS F_NULA,
       ...
       FROM tabla
            LEFT JOIN nulos ON (tabla.CLAVE = nulos.CLAVE)
suponiendo vacía la tabla nulos, todos los resultados de FECHA son nulos, con lo que al hacer la transformación debería dar 01-05-1970, y sin embargo me devuelve 30-12-1899

¿En qué me equivoco?
Saludos
salvica


La franja horaria es GMT +2. Ahora son las 21:06:41.

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