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.