[+/-]
Los tipos de fecha y hora para representar valores temporales son
DATETIME
, DATE
,
TIMESTAMP
, TIME
, y
YEAR
. Cada tipo temporal tiene un rango de
valores legales, así como un valor “zero” que se usa
cuando se especifica un valor ilegal que MySQL no puede
representar. El tipo TIMESTAMP
tiene un
comportamiento automático especial, descrito posteriormente.
Desde MySQL 5.0.2, MySQL da advertencias/errores si trata de
insertar una fecha ilegal. Puede hacer que MySQL acepte ciertas
fechas, tales como '1999-11-31'
, usando el modo
SQL ALLOW_INVALID_DATES
. (Antes de 5.0.2, este
modo era el comportamiento por defecto de MySQL). Esto es útil
cuando quiere almacenar el valor “posiblemente
erróneo” que el usuario especifica (por ejemplo, en un
formulario web) en la base de datos para un posterior
procesamiento. En este modo, MySQL sólo verifica que el mes esté
en el rango de 0 a 12 y que el día esté en el rango de 0 a 31.
Estos rangos incluyen cero ya que MySQL permite almacenar fechas
cuando el día o el mes son cero en columnas
DATE
o DATETIME
. Esto es
muy útil para aplicaciones que necesiten almacenar una fecha de
nacimiento para la que no sepa la fecha exacta. En este caso,
simplemente almacena la fecha como '1999-00-00'
o '1999-01-00'
. Si almacena valores similares a
estos, no debe esperar obtener resultados correctos para funciones
tales como DATE_SUB()
or
DATE_ADD
que necesitan fechas completas. (Si no
quiere permitir ceros en las fechas, puede usar el modo SQL
NO_ZERO_IN_DATE
).
MySQL permite almacenar '0000-00-00'
como
“fecha de pruebas” (si no está usando el modo SQL
NO_ZERO_DATE
). Esto es mejor que usar (y usa
menos espacio de datos e índice) que usar valores
NULL
.
Modificando la variable de sistema sql_mode
al
modo apropiado, puede especificar exactamente qué tipos de datos
quiere soportar con MySQL. Consulte
Sección 5.3.2, “El modo SQL del servidor”.
Aquí hay algunas consideraciones generales a tener en cuenta cuando se trabaja con tipos de fecha y hora:
MySQL muestra los valores para una fecha o hora en un formato de salida estándar, pero trata de intepretar una variedad de formatos para los valores de entrada que se proporcionan (por ejemplo, cuando especifica un valor para asignar o comparar con un tipo fecha o hora). Sólo los formatos descritos en las siguientes secciones son soportados. Se espera la entrada de valores legales. Si se usan otros formatos pueden ocurrir resultados imprevisibles.
Las fechas con años de dos dígitos son ambituas, ya que no se sabe el siglo. MySQL interpreta los años de dos dígitos usando las siguientes reglas:
Los años del rango 70-99
se convierten
en 1970-1999
.
Los años del rango 00-69
se convierten
en 2000-2069
.
Aunque MySQL trata de interpretar los valores con varios
formatos, las fechas siempre deben darse en el orden
año-mes-día (por ejemplo, '98-09-04'
), en
lugar del formato mes-día-año o día-mes-año usados
comunmente (por ejemplo, '09-04-98'
,
'04-09-98'
).
MySQL convierte automáticamente una fecha o hora a un número si el valor se usa en un contexto numérico y viceversa.
Cuando MySQL encuentra un valor para fecha o hora que está
fuera de rango o es ilegal para el tipo (como se describe al
inicio de la sección), lo convierte al valor
“cero” para ese tipo. La excepción es que los
valores fuera de rango del tipo TIME
se
reemplazan por el valor límite de rango apropiado para el
tipo TIME
.
La siguiente tabla muestra el formato del valor
“cero” para cada tipo. Tenga en cuenta que el uso
de estos valores produce mensajes de advertencia si el modo
SQL NO_ZERO_DATE
está activado.
Tipo de Columna | “Cero” Valor |
DATETIME |
'0000-00-00 00:00:00' |
DATE |
'0000-00-00' |
TIMESTAMP |
00000000000000 |
TIME |
'00:00:00' |
YEAR |
0000 |
Los valores “cero” son especiales, pero puede
almacenarlos o referirse a ellos explícitamente usando los
valores mostrados en la tabla. También puede hacerlo usando
los valores '0'
o 0
, que
son más sencillos de escribir.
Los valores de fecha o hora “cero” usados a
través de MyODBC se convierten automáticamente a
NULL
en MyODBC 2.50.12 y posterior, ya que
ODBC no puede tratar estos valores.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.