You are on page 1of 3

Los tipos de datos DATETIME, DATE y

TIMESTAMP11.3.1.1. Propiedades de TIMESTAMP desde MySQL 4.1


El tipo DATETIME se usa cuando necesita valores que contienen información
de fecha y hora. MySQL recibe y muestra los valores DATETIME en formato
'YYYY-MM-DD HH:MM:SS' . El rango soportado es de '1000-01-01 00:00:00' a
'9999-12-31 23:59:59'. (“Soportado” significa que aunque valores anteriores
pueden funcionar, no hay garantías)

El tipo DATE se usa cuando necesita sólo un valor de fecha, sin una parte de
hora. MySQL recibe y muestra los valores DATE en formato 'YYYY-MM-DD' . El
rango soportado es de '1000-01-01' a '9999-12-31'.

El tipo TIMESTAMP tiene varias propiedades, en función de la versión de


MySQSL y el modo SQL que esté ejecutando el servidor. Estas propiedades
se describen posteriormente en esta sección.

Puede especificar valores DATETIME, DATE, y TIMESTAMP usando cualquier de


los siguientes formatos:

 Como cadena de caracteres en formato 'YYYY-MM-DD HH:MM:SS' o 'YY-


MM-DD HH:MM:SS' . Una sintaxis “relajada” se permite: Cualquier carácter
de puntuación puede usarse como delimitador entre partes de fecha o
de hora. Por ejemplo, '98-12-31 11:30:45', '98.12.31 11+30+45',
'98/12/31 11*30*45', y '98@12@31 11^30^45' son equivalentes.
 Como cadena de caracteres en formato 'YYYY-MM-DD' or 'YY-MM-DD' .
Se permite una sintaxis “relajada” . Por ejemplo, '98-12-31', '98.12.31',
'98/12/31', y '98@12@31' son equivalentes.
 Como cadena de caracteres sin delimitadores en formato
'YYYYMMDDHHMMSS' o 'YYMMDDHHMMSS', mientras que la cadena de
caracteres tenga sentido como fecha. Por ejemmplo, '19970523091528'
y '970523091528' se interpretan como '1997-05-23 09:15:28', pero
'971122129015' es ilegal (tiene una parte de minutos sin sentido) y se
convierte en '0000-00-00 00:00:00'.
 Como cadena de caracteres sin delimitadores en formato 'YYYYMMDD' o
'YYMMDD' , mientras que el cadena de caracteres tenga sentido como
fecha. Por ejemplo, '19970523' y '970523' se interpretan como '1997-
05-23', pero '971332' es ilegal (tiene una parte de mes y día sin
sentido) y se convierte en '0000-00-00'.
 Como número en formato YYYYMMDDHHMMSS o YYMMDDHHMMSS, mientras que
el número tenga sentido como fecha. Por ejemplo, 19830905132800 y
830905132800 se interpretan como '1983-09-05 13:28:00'.
 Como número en formato YYYYMMDD o YYMMDD, mientras que el número
tenga sentido como fecha. Por ejemplo, 19830905 y 830905 se
interpretan como '1983-09-05'.
 Como resultado de una función que retorne un valor acceptable en un
contexto DATETIME, DATE, o TIMESTAMP , como NOW() o CURRENT_DATE.

Los valores ilegales de DATETIME, DATE, o TIMESTAMP se convierten al valor


“cero” del tipo apropiado ('0000-00-00 00:00:00', '0000-00-00', o
00000000000000).

Para valores especificados como cadenas de caracteres que incluyan


partes de fecha delimitadas, no es necesario especificar dos dígitos para
valores de mes o día menores que 10. '1979-6-9' es lo mismo que '1979-06-
09'. Similarmente, para valores especificados como cadenas de caracteres
que incluyan delimitadores para la parte de hora, no es necesario
especificar dos dígitos para horas, minutos o segundos menores que 10.
'1979-10-30 1:2:3' es lo mismo que '1979-10-30 01:02:03'.

Los valores especificados como números deben tener una longitud de 6, 8,


12, o 14 dígitos. Si un número tiene una longitud de 8 o 14 dígitos, se asume
que está en formato YYYYMMDD o YYYYMMDDHHMMSS y que el año lo dan los
primeros 4 dígitos. Si el número tiene 6 o 12 dígitos de longitud, se asume
que está en formato YYMMDD o YYMMDDHHMMSS y que el año lo dan los primeros 2
dígitos. A los números que no tengan estas longitudes se les añaden ceros a
la izquierda hasta la longitud más cercana permitida.

Los valores especificados como cadenas de caracteres no delimitadas se


interpretan usando su longitud. Si la cadena de caracteres tiene longitud 8 o
14, el año se asume como dado por los primeros 4 caracteres. En el resto de
caso, se supone que el año lo dan los primeros 2 caracteres. La cadena de
caracteres se interpreta de izquierda a derecha para encontrar el año, mes,
día, hora, minuto y segundo, para tantas partes como representa la cadena
de caracteres. Esto significa que no debe usar cadenas de caracteres con
menos de 6 caracteres. Por ejemplo, si especifica '9903', pensando que
representa Marzo, 1999, MySQL inserta un valor “cero” en la tabla. Esto es
porque el valor de año y mes son 99 y 03, pero la parte de día no se
encuentra, así que el valor no es una fecha legal. Sin embargo, puede
especificar explícitamente un valor de cero para representar partes de día y
mes. Por ejemplo, puede usar '990300' para insertar el valor '1999-03-00'.

Puede asignar valores de un tipo a un objeto de un tipo diferente hasta un


límite. Sin embargo, hay algunas alteraciones del valor o pérdidas de
información:

 Si asigna un valor DATE a un objeto DATETIME o TIMESTAMP, la parte de


hora del valor resultante se cambia a '00:00:00' ya que el valor DATE
no contiene información temporal.
 Si asigna un valor DATETIME o TIMESTAMP a un objeto DATE, la parte
temporal del valor resultante se borra porque el tipo DATE no tiene
información temporal.
 Tenga en cuenta que aunque DATETIME, DATE, y TIMESTAMP pueden
especificarse usando el mismo conjunto de formatos, los tipos no
tienen el mismo rango de valores. Por ejemplo, TIMESTAMP no pueden
ser anteriores a 1970 o posteriores a 2037. Esto significa que una fecha
como '1968-01-01', que sería legal como DATETIME o DATE no es un
valor válido TIMESTAMP y se convierte a 0 si se asigna a un objeto de
este tipo.

Tenga en cuenta ciertas cosas al especificar valores temporales:

 El formato relajado para valores especificados como cadenas de


caracteres puede ser problemático. Por ejemplo, un valor como
'10:11:12' puede parecer una hora por el delimitador ':' , pero si se
usa en un contexto de fecha se interpreta como '2010-11-12'. El valor
'10:45:15' se convierte a '0000-00-00' ya que '45' no es un mes legal.
 El servidor MySQL realiza sólo chequeo básico de la validez de las
fechas: Los rangos para año, mes y día son de 1000 a 9999, 00 a 12, y
00 a 31, respectivamente. Cualquier fecha que contenga partes fuera
de estos rangos está sujeta a conversión a '0000-00-00'. Tenga en
cuenta que esto permite almacenar fechas inválidas como '2002-04-
31'. Para asegurar que una fecha es válida, haga una comprobación
en su aplicación.
 Fechas con valores de año de dos dígitos son ambíguas porque no se
conoce el siglo. MySQL interpreta los años de dos dígitos usando las
siguientes reglas:

 Los valores de años en el rango 00-69 se convierten a 2000-2069.


 Los valores de años en el rango 70-99 se convierten a 1970-1999.

You might also like