Problemas Usando Colunas DATE


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 MariaDB 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 MariaDB 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 MariaDB 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 MariaDB 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 MariaDB 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 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.

Retornar