Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Duda sobre el tipo de datos DATETIME en MYSQL (https://www.clubdelphi.com/foros/showthread.php?t=45821)

flystar 14-07-2007 15:09:32

Duda sobre el tipo de datos DATETIME en MYSQL
 
Buenos Días:

Solicito auxilio de alguna alma caritativa que pueda darme un poco de luz con esta ignorancia que tengo y la cual procedo a tratar de explicar:

He estudiado cierto tiempo una funcion de MYSQL llamada DATEDIFF()

DATEDIFF() devuelve el número de días entre la fecha de inicio expr y la de final expr2. expr y expr2 son expresiones de tipo date o date-and-time. Sólo las partes correspondientes a la fecha de cada expresión se usan en los cáculos.

Pues bien despues de estudiarla procedí a probarla con un par de campos de una tabla que de una BD que tengo que tiene los siguientes valores:

campo1= 12/07/2007 23:30:12 y campo 2= 12/07/2007 23:30:05

Entonces me puse a experimentar la funcion con este par de datos y haciendo algunos campos para experimentar si ponia un valor primero o despues para probar, entonces me dí cuenta que no funciona correctamente y otra vez lo probe de varias maneras quitandole la fecha y a veces jalaba y a veces no... total que termine preguntandome ¿Que esta pasando?

Ah de repente me fije bien y resulta que los ejemplos de Datediff en la documentacion de MYSQL vienen de manera que la fecha se pone con guiones osea asi:

SELECT DATEDIFF('1997-11-31 23:59:59','1997-12-31');

Pero resulta que en la BD los valores de datetime se guardan asi:

campo1= 11/31/1997 23:59:59

Entonces esa diferencia de que se almacena con '/' para separar
las partes de la fecha hace que ya no jale bien la funcion,
entonces ahi lo que tuve que hacer es crear una rutina para
poder crear una variable con el formato correcto para poderle
applicar la funcion, lo cual me parece innecesario por que
segun yo no deberia ser asi, se deberia almacenar la fecha con
el formato correcto asi como viene en los ejemplos de mysql.

Alguien me podria explicar como le hago para que los valores
de fecha en un campo de tipo datetime se almacenen con el valor
con el formato correcto?

osea asi: valor1= 1997-11-31 23:59:59 pero no asi:
31/11/2007 23:59:59

Muchas Gracias.

roman 15-07-2007 03:04:18

Cita:

Empezado por flystar
Pero resulta que en la BD los valores de datetime se guardan asi:

campo1= 11/31/1997 23:59:59

¿Y como sabes que es así como se guardan los valores? La pregunta parece rara pero una cosa es la forma en que se almacenan los datos y otra la forma en que se muestran.

MySQL seguramente guarda las fechas internamente como números, similar a como hace Delphi. Pero para especificar fechas mediante texto, MySQL usa el formato aaaa-mm-dd, tal como has visto en los ejemplos.

Ahora bien, en estos momentos hago una prueba accediendo a una tabla MySQL con ZEOS, y- efectivamente -veo las fechas en formato dd/mm/aaaa. Pero esto no quiere decir que así estén amacenadas, simplemente quiere decir que ése es el formato de fecha que tengo establecido en Windows. Si lo cambio, cambia también la presentación.

Si hago un moldeo:

Código SQL [-]
select cast(fecha as char(10)) ...

"desenmascaro" el formato y se muestra tal como lo hace MySQL por defecto, es decir, con aaaa-mm-dd. Y esto es así porque el motor, para hacer el moldeo usa sus propios estándares.

// Saludos

flystar 16-07-2007 22:21:43

Tienes la razón, con ese detalle que me diste lo pude solucionar.

Gracias.


La franja horaria es GMT +2. Ahora son las 08:24:29.

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