PDA

Ver la Versión Completa : SQLite3 devuelve 01-01-1899


salvica
29-01-2010, 17:43:45
Estoy intentando que una consulta me formatee las fechas NULL como 01-01-1970, para ello, dentro de una consulta, hago lo siguiente:

...
( 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
...
( 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

...
( 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