Solución:
Esto se basa en el suposición que está recibiendo un error sobre el formato de fecha, como un valor de mes no válido o un carácter no numérico cuando se espera un valor numérico.
Las fechas almacenadas en la base de datos no tienen formatos. Cuando consulta la fecha, su cliente está formateando la fecha para mostrarla, como 4/16/2011
. Normalmente se usa el mismo formato de fecha para seleccionar y actualizar fechas, pero en este caso parecen ser diferentes, por lo que su cliente aparentemente está haciendo algo más complicado que SQL * Plus, por ejemplo.
Cuando intenta actualizarlo, está utilizando un modelo de formato de fecha predeterminado. Debido a cómo se muestra, está asumiendo que es MM/DD/YYYY
, pero parece que no es así. Puede averiguar qué es, pero es mejor no depender en absoluto de los modelos de formato implícito o predeterminado.
Ya sea que ese sea el problema o no, siempre debe especificar el modelo de fecha:
UPDATE PASOFDATE SET ASOFDATE = TO_DATE('11/21/2012', 'MM/DD/YYYY');
Dado que no está especificando un componente de tiempo, todo Oracle DATE
las columnas incluyen una hora, incluso si es medianoche; también puede usar un literal de fecha:
UPDATE PASOFDATE SET ASOFDATE = DATE '2012-11-21';
Quizás debería comprobar que el valor actual no incluye una hora, aunque el nombre de la columna sugiere que no lo hace.
Así es como se configura la fecha y la hora:
update user set expiry_date=TO_DATE('31/DEC/2017 12:59:59', 'dd/mm/yyyy hh24:mi:ss') where id=123;