Como o título diz, quero encontrar uma maneira de verificar quais dos meus conjuntos de dados estão passados 6 meses do SYSDATE via consulta.
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
I'tentei o seguinte, mas devolve um erro dizendo que o meu formato de data está errado. No entanto, inserindo os dados que usei esse formato de data como solicitado/pretendido e não tive problemas.
Erro na Linha de Comando : 10 Coluna : 25
Blockquote
Relatório de erro -
SQL Error: ORA-01861: literal não corresponde à string de formato 01861. 00000 - "literal não corresponde ao formato string"
*Causa: Os literais na entrada devem ter o mesmo comprimento que os literais em a cadeia de formatos (com excepção dos principais espaços em branco). Se o "FX" modificador foi alternado, o literal deve combinar exatamente, sem espaço extra para brancos.
*Acção: Corrige a string de formato para corresponder ao literal.
Como sua seqüência de consulta é literal, e assumindo que suas datas são devidamente armazenadas como DATE
você deve utilizar date literals:
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
Se você quiser utilizar TO_DATE
(porque, por exemplo, o valor da sua consulta não é literal), eu sugiro que você defina explicitamente o parâmetro NLS_DATE_LANGUAGE, pois você está utilizando nomes de meses abreviados nos EUA. Dessa forma, ele ganhou't quebra em alguma instalação Oracle localizada:
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
Você precisa converter a string para data utilizando a função to_date()
.
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
OU
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
OU
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
Isto só funcionará se "OrderDate" for armazenado no formato "Date". Se for Varchar' você deve aplicar
to_date()` func nessa coluna também como
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');