Al diseñar o utilizar un Modelo de Versionado para una nueva aplicación, o bien, al mover tablas Versionadas (o con Fechas, aunque no sean derivadas de las Versiones de Datos) entre distintos motores de Base de Datos, es importante conocer los tipos de datos existentes para el almacenamiento de Fechas en el motor de Base de Datos con que tengamos que trabajar: ¿Almacenan sólo Fecha o Fecha y Hora? ¿Qué Fechas mínima y máxima permite almacenar cada tipo de dato? ¿Con qué precisión se almacena la información horaria? ¿Qué calendario se utiliza: Calendario Juliano o Calendario Gregoriano? A continuación se muestra una pequeña tabla resumen de ejemplo:
Motor |
Tipo de Dato |
Desde |
Hasta |
Almacenamiento |
Precisión |
SQL Server |
smalldatetime |
01/01/1900 |
06/06/2079 |
4 Bytes |
1 min |
SQL Server |
datetime |
01/01/1753 |
31/12/9999 |
8 Bytes |
3,33 ms |
Access 2003 |
datetime |
01/01/0100 |
31/12/9999 |
8 Bytes |
|
MySQL |
date |
01/01/1000 |
31/12/9999 |
3 Bytes |
1 día |
MySQL |
datetime |
01/01/1000 |
31/12/9999 |
8 Bytes |
1 seg |
ORACLE |
date |
-01/01/4712 |
31/12/9999 |
|
1 día. |
ORACLE |
timestamp |
-01/01/4712 |
31/12/9999 |
|
1 nanoseg. |
DB2 |
date |
01/01/0001 |
31/12/9999 |
|
1 día |
DB2 |
timestamp |
01/01/0001 |
31/12/9999 |
|
1 microseg. |
De todas las cuestiones anteriores, quizás la más importante sea cuáles son las Fechas máxima y mínima que permite almacenar cada tipo de dato Fecha en el motor de Base de Datos que tengamos que utilizar, debido a que en el Modelo de Versionado que estemos diseñando (o que tengamos que utilizar) las Fechas utilizadas como –infinito (01/01/0001) y +infinito (ej:31/12/9999) estén en rango y puedan almacenarse.
Del mismo modo, también es importante conocer si estamos trabajando con tipos de datos que almacenan sólo la Fecha, o por el contrario, almacenan Fecha y Hora. También puede ser importante la precisión, ya que al cargar datos sobre campos menos precisos, estos se verán truncados o redondeados.
Por supuesto, deberemos estar muy familiarizados con la manipulación de Fechas en el motor de base de datos que estemos utilizando (principalmente, con las funciones de Fecha del motor): cómo realizar un Casting entre Fechas y otros tipos de datos, como obtener una parte (ej: el mes) de una Fecha, como operar con fechas (ej: obtener el día siguiente a una Fecha dada), etc. |