O formato de um valor DATE é
        'YYYY-MM-DD'. De acordo com o padrão SQL,
        nenhum outro formato é permitido. Você deve usar este formato
        em expressões UPDATE e na cláusula WHERE de
        insrtruções SELECT. Por exemplo:
      
mysql> SELECT * FROM nome_tabela WHERE date >= '1997-05-05';
        Por conveniência, o MySQL converte automaticamente uma data em
        um número se a data é usada em um contexto numérico (e vice
        versa). Ele também é esperto o bastante para permitir uma
        forma de string ``relaxada'' em uma atualização e em uma
        cláusula WHERE que compara uma data a uma
        coluna TIMESTAMP, DATE, ou
        DATETIME. (Forma relaxada significa que
        qualquer caracter de pontuação pode seu usado como separador
        entre as partes. Por exemplo, '1998-08-15' e
        '1998#08#15' são equivalentes). O MySQL
        também pode converter uma string sem separadores (como
        '19980815'), desde que ela faça sentido como
        uma data.
      
        A data especial '0000-00-00' pode ser
        armazenada e recuperada como '0000-00-00'. Ao
        usar uma data '0000-00-00' com o
        MyODBC, ele a converterá automaticamente em
        NULL em sua versão 2.50.12 e acima, porqie o
        ODBC não pode tratar este tipo de data.
      
Como o MySQL realiza a conversão descrita acima, a seguinte instrução funcionará:
mysql>INSERT INTO nome_tabela (idate) VALUES (19970505);mysql>INSERT INTO nome_tabela (idate) VALUES ('19970505');mysql>INSERT INTO nome_tabela (idate) VALUES ('97-05-05');mysql>INSERT INTO nome_tabela (idate) VALUES ('1997.05.05');mysql>INSERT INTO nome_tabela (idate) VALUES ('1997 05 05');mysql>INSERT INTO nome_tabela (idate) VALUES ('0000-00-00');mysql>SELECT idate FROM nome_tabela WHERE idate >= '1997-05-05';mysql>SELECT idate FROM nome_tabela WHERE idate >= 19970505;mysql>SELECT MOD(idate,100) FROM nome_tabela WHERE idate >= 19970505;mysql>SELECT idate FROM nome_tabela WHERE idate >= '19970505';
No entatnto o seguinte não funcionará:
mysql> SELECT idate FROM nome_tabela WHERE STRCMP(idate,'19970505')=0;
        STRCMP() é uma função string, assim ela
        converte idate em uma string e realiza um
        comparação de string. Ela não converte
        '19970505' em uma datae e realiza uma
        comparaçãas de data.
      
        Note que o MySQL faz uma verificação muito limitada da
        validade da data. Se você aramazenar uma data incorreto, tal
        como '1998-2-31', a data invalida será
        armazenada.
      
Como o MySQL empacota a data para armazenamento, ele não pode armazenar qualquer data dada como já que ela não caberia dentro do buffer de resultado. As regras de aceitação das datas são:
            Se o MySQL pode armazenar e recuperar um data dada, a data
            errada é acieta para colunas DATE e
            DATETIME.
          
Todos os valores de dia entre 0-31 são aceitos para qualquer data. Isto torna muito conveniente para plicações web nas quais você pede ano, mês e dia em 3 campos diferentes.
            O campo do dia ou mês pode ser zero. Isto é conveniente se
            você quiser armazenar uma data de aniversário em uma
            coluna DATE e você não sabea parte da
            data.
          
        Se a data não pode ser convertida para qualquer valor
        razoável, um 0 é armazenado no campo
        DATE, o qual será recuperado como
        0000-00-00. Isto é uma questão tanto de
        velocidade quanto de conveniência já que acreditamos que a
        responsabilidade do banco de dados é recuperar a mesma data que
        você armazenou (mesmo se a data não era logicamente correta em
        todos os casos). Nós pensamos que é papel da aplicação
        verificar as datas, e não do servidor.
      
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

