Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Datetime

Estas en el tema de Datetime en el foro de Bases de Datos General en Foros del Web. Hola, alguien me podria ayudar a que cuando cree una tabla y ponga en tipo de dato datatime, solo me guarde el formato DD/MM/AAAA??? Les ...
  #1 (permalink)  
Antiguo 30/11/2012, 01:53
 
Fecha de Ingreso: mayo-2009
Mensajes: 34
Antigüedad: 14 años, 11 meses
Puntos: 0
Sonrisa Datetime

Hola, alguien me podria ayudar a que cuando cree una tabla y ponga en tipo de dato datatime, solo me guarde el formato DD/MM/AAAA???

Les agradecería muchisimo!
  #2 (permalink)  
Antiguo 30/11/2012, 03:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Datetime

Eso no existe, porque en la realidad no se guarda una fecha sino un valor numérico binario.
La explicación de lo que es el dato es un poco larga, pero vamos a lo simple:
El estandar especifica que se guarde AAAA-MM-DD HH:MM:SS, y nbo existe otro modo de hacerlo. Lo único que debes hacer es, luego en la consulta, usar las funciones adecuadas para obtenerlo como desees, siempre y cuando quieras recuperar ese formato en la consulta y no dejar que eso lo resuelva el lenguaje de programación, cosa que es mucho más simple.
Dime por qué piensas que lo que quieres resultaría más conveniente, y te diré por qué estás equivocado.
¿Crees que eso no lo resolvieron los que establecieron el estandar?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/11/2012, 07:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Datetime

Vamos a tomarnos unos minutos y tratar de explicar (otra vez) cuál es la razón de que lo que pides sea imposible.
Veamos.
Las fechas, a nivel de estructura de almacenamiento, pese a lo que supones, no existen como tales, como tampoco existen las letras; lo que se almacena es una representación que le DBMS se encarga de "traducir" en un formato de fecha humanamente interpretable (y caracteres en el otro caso). Pero lo que realmente se almacena es un numero de 32 bits (4 bytes) de ancho, y todo número se almacena como binario. No existen para las computadoras las "cifras", sólo binarios, y en este caso (fechas) es de punto flotante.
La parte entera del número representa los días, mientras que la parte decimal expresa las horas minutos y segundos (y milésimos en algunos casos). Luego, para poder ver la "fecha" el sistema debe convertir ese binario a una representación que se comprenda, pero esa representación, como verás, no es lo que se almacena.
¿Por qué se hace de ese modo? ¿Por qué no se guarda un formato de fecha determinado?
Bueno, por empezar, porque no todos los países escriben las fechas del mismo modo, lo que lleva a un caos de representaciones. Entonces el sistema debe tener la flexibilidad necesaria para cubrir todo el espectro de estas representaciones con muy poco esfuerzo (esfuerzo = tiempo = costo = dinero).
Además, desde el punto de vista de los sistemas informáticos, es muchísimo más simple poder calcular rangos, mayores, menores y todo calculo aritmético necesario con fechas, al ser un numero binario que se expresa como AAAAMMDDHHMMSSFFFF, es muchísimo más simple y rápido con esa forma de almacenamiento, que usando DDMMAAAA, ya que esta última requeriría procesos adicionales de análisis de datos para poder hacer esos mismos cálculos, y como te dije: proceso = esfuerzo = tiempo = costo = dinero...
Entonces, lo que se definió como estándar es usar ese modo de almacenamiento, tanto por aprovechamiento de espacio (máximo de 8 bytes contra 24), como por eficiencia de procesamiento.
¿Se va entendiendo la idea?
Entonces, simplemente lo que se hace es invocar luego funciones de SQL propias de cada DBMS o bien del lenguaje de programación para convertir el dato en la representación adecuada para ser mostrado.
Si lo piensas, el único momento en que se necesita un cierto formato es para que el usuario lo vea. nada más. A nivel de procesos, es totalmente innecesario que tenga una determinada representación.
Incluso más: Los propios lenguajes de programación manipulan las fechas internamente como decimales, no como fechas (de hecho los tipos de fecha están relacionados con las clases de tipo numérico), porque también a ese nivel es mejor. Por eso cuando programas es siempre mejor manipular los parámetros con los recursos de las librerías, y no generando cadenas de texto para estos casos. De ese modo el conector manipula los valores de fecha y números en sus formas nativas (numéricas), y no necesita conversiones adicionales.

Finalmente, ni se te ocurra almacenar una fecha en un VARCHAR (o VARCHAR2, según el caso). Eso sería una metida de pata de las grandes, MUY grandes.
Si lo hicieras no podrías luego realizar operaciones con esas fechas sin la necesidad de usar funciones de conversión, e incluso tendrías graves errores de lógica en ciertos casos.
¿Qué casos?
Por ejemplo: Si quieres ordenar una fecha de menor a mayor, podría suceder que el 01/05/2023 sea menor al 24/03/1895, lo cual es obviamente imposible. Pero eso sucedería simplemente porque un VARCHAR se ordena alfabéticamente, y en ese caso quedaría así:
01/05/2023
16/12/2008
24/03/1895
Como puedes ver están perfectamente ordenados... alfabéticamente.

¿Se termina de entender el problema?

No le des vuelta al asunto. Usa las cosas como son y luego utiliza las funciones adecuadas para lograr mostrar lo que quieres.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 30/11/2012, 16:05
 
Fecha de Ingreso: mayo-2009
Mensajes: 34
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Datetime

Gracias, ya entendí :D!

Etiquetas: datetime, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:43.