El format de un valor DATE es
        'YYYY-MM-DD'. De acuerdo al estándar SQL
        ningún otro formato se permite. Debería usar este formato en
        las sentencias UPDATE y en la cláusula
        WHERE de las sentencias
        SELECT. Por ejemplo:
      
mysql> SELECT * FROM nombre_de_tabla WHERE date >= '2003-05-05';
        Por motivos de conveniencia, MySQL convierte automáticamente
        una fecha a un número si la fecha se utiliza en un contexto
        numérico (y viceversa). Es también suficientemente inteligente
        para permitir diversos formatos de cadena de caracteres cuando
        se está actualizando y en las cláusulas
        WHERE que comparan una fecha con una columna
        TIMESTAMP, DATE, o
        DATETIME. (Diversos formatos, significa que
        puede utilizarse cualquier carácter de puntuación como
        separador de las partes de la fecha. Por ejemplo,
        '2004-08-15' y
        '2004#08#15' son equivalentes.) MySQL
        también puede convertir una cadena de caracteres que no
        contenga separadores (como '20040815'),
        siempre que tenga sentido como fecha.
      
        Cuando compara una colmna DATE,
        TIME, DATETIME, o
        TIMESTAMP a una cadena de caracteres
        constante con los operadores <,
        <=, =,
        >=, >, o
        BETWEEN, MySQL normalmente convierte la
        cadena de caráteres a un entero largo interno para una
        comparación más rápda (y también para hacer una comparación
        algo más permisiva). Aún así, esta conversión está sujeta a
        las siguientes restricciones:
      
Cuando compara dos columnas
            Cuando usted compare columnas DATE,
            TIME, DATETIME, o
            TIMESTAMP con una expresión.
          
            Cuando usted utilice cualquier otro método de comparación
            que no sean aquellos recientemente citados, como
            IN o STRCMP().
          
Para estos casos excepcionales, la comparación se hace convirtiendo los objetos a cadenas de caracteres y realizando una comparación de cadenas de caracteres.
Para mantener todo a salvo, asuma que las fechas son comparadas como cadenas de caracteresy utilice las funciones de cadena de caracteres apropiadas para comparar un valor temporal con una cadena de caracteres.
        La fecha especial '0000-00-00' puede
        almacenarse y recogerse como '0000-00-00'.
        Cuando se utiliza una fecha '0000-00-00' a
        través de MyODBC, es convierte automáticamente en
        NULL en MyODBC 2.50.12 y superiores, porque
        ODBC no puede gestionar este tipo de fechas.
      
Como MySQL realiza las conversiones anteriores, las siguientes sentencias funcionan:
mysql> INSERT INTOnombre_de_tabla(idate) VALUES (19970505); mysql> INSERT INTOnombre_de_tabla(idate) VALUES ('19970505'); mysql> INSERT INTOnombre_de_tabla(idate) VALUES ('97-05-05'); mysql> INSERT INTOnombre_de_tabla(idate) VALUES ('1997.05.05'); mysql> INSERT INTOnombre_de_tabla(idate) VALUES ('1997 05 05'); mysql> INSERT INTOnombre_de_tabla(idate) VALUES ('0000-00-00'); mysql> SELECT idate FROMnombre_de_tablaWHERE idate >= '1997-05-05'; mysql> SELECT idate FROMnombre_de_tablaWHERE idate >= 19970505; mysql> SELECT MOD(idate,100) FROMnombre_de_tablaWHERE idate >= 19970505; mysql> SELECT idate FROMnombre_de_tablaWHERE idate >= '19970505';
Pero lo siguente no funciona:
mysql> SELECT idate FROM nombre_de_tabla WHERE STRCMP(idate,'20030505')=0;
        STRCMP() es una función de comparación de
        cadenas, así que convierte idate a una
        cadena de caracteres en formato 'YYYY-MM-DD'
        y realiza una comparación de cadenas. Es decir, NO convierte
        '20030505' en la fecha
        '2003-05-05' para realizar una comparación
        de fechas.
      
        Si está utilizando el modo SQL ALLOW_INVALID_DATES
        (permitir fechas no válidas), MySQL le permite
        almacenar las fechas que le proporciona con una comprobación
        mínima: MySQL se asegura únicamente que el día esté en el
        rango entre 1 y 31, y el mes en el rango entre 1 y 12.
      
Esto hace que MySQL sea muy convenienta para las aplicaciones web en que usted obtiene el año, mes y día en tres campos diferentes y quiere almacenar exactamente lo que el usuario insertó (sin validación de fechas).
        Si no está utilizando el modo SQL
        NO_ZERO_IN_DATE, la parte del día o el mes
        pueden ser cero. Esto es conveniente si quiere almacenar una
        fecha de nacimiento en una columna DATE y
        solo conoce parte de esa fecha.
      
        Si no está utlizando el modo SQL
        NO_ZERO_DATE, MySQL también le permite
        almacenar '0000-00-00' como fecha comodín.
        En algunos momentos esto puede ser más adecuado que utilizar
        valores NULL.
      
        Si la fecha no puede ser convertida a ningún valor razonable,
        se almacena un 0 en la columna
        DATE, que se extrae como
        '0000-00-00'. Esto es una cuestión de
        velocidad y conveniencia. Creemos que la responsabilidad del
        servidor de bases de datos es recoger la misma fecha que usted
        almacenó (aún cuando la fecha no fuese lógicamente correcta
        en todos los casos). Creemos que es responsabilidad de la
        aplicación y no del servidor comprobar las fechas.
      
        Si quiere que MySQL compruebe todas las fechas y acepte solo las
        que sean correctas (al menos que esto sea sobreseido por
        IGNORE), debería establecer el modo SQL a
        "NO_ZERO_IN_DATE,NO_ZERO_DATE".
      
        La gestión de fechas en MySQL 5.0.1 y anteriores funciona como
        en MySQL 5.0.2 con el modo SQL
        ALLOW_INVALID_DATES activado.
      
É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.

