:: DEVELOPER ZONE
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.
© 1995-2005 MySQL AB. All rights reserved.
