Como dice el título, quiero encontrar una manera de comprobar cuáles de mis conjuntos de datos han pasado 6 meses desde SYSDATE mediante una consulta.
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
He probado lo siguiente pero me devuelve un error diciendo que mi formato de fecha es incorrecto. Sin embargo, al insertar los datos utilicé ese formato de fecha como se pedía/pretendía y no tuve problemas.
Error en la línea de comandos : 10 Columna : 25
Blockquote
Informe de error -
Error SQL: ORA-01861: el literal no coincide con la cadena de formato 01861. 00000 - "literal no coincide con la cadena de formato"
*Causa: Los literales en la entrada deben tener la misma longitud que los literales en la cadena de formato (con la excepción de los espacios en blanco). Si el modificador "FX" ha sido activado, el literal debe coincidir exactamente sin espacios en blanco adicionales.
Acción: Corregir la cadena de formato para que coincida con el literal.
Como su cadena de consulta es un literal, y asumiendo que sus fechas se almacenan correctamente como DATE
, debería utilizar literales de fecha:
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
Si desea utilizar TO_DATE
(porque, por ejemplo, su valor de consulta no es un literal), le sugiero que establezca explícitamente el parámetro NLS_DATE_LANGUAGE, ya que está utilizando nombres de mes abreviados en EE.UU. De esta manera, no se romperá en alguna instalación localizada de Oracle:
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
Es necesario convertir la cadena en fecha utilizando la función to_date()
.
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
O
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
O
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
Esto sólo funcionará si OrderDate
se almacena en Formato de fecha
. Si es Varchar
debe aplicar la función to_date()
en esa columna también como
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');