Si encuentras alguna incompatibilidad con tu código o proyecto, recuerda probar siempre en un entorno de testing antes subir el código al proyecto final.
Solución:
Además de poder agregar una cantidad de días a una fecha, puede usar tipos de datos de intervalo asumiendo que está en Oracle 9i
o posterior, que puede ser algo más fácil de leer,
SQL> ed
Wrote file afiedt.buf
SELECT sysdate, sysdate + interval '30' minute FROM dual
SQL> /
SYSDATE SYSDATE+INTERVAL'30'
-------------------- --------------------
02-NOV-2008 16:21:40 02-NOV-2008 16:51:40
Todas las otras respuestas son básicamente correctas, pero no creo que nadie haya respondido directamente a su pregunta original.
Suponiendo que “date_and_time” en su ejemplo es una columna con tipo DATE o TIMESTAMP, creo que solo necesita cambiar esto:
to_char(date_and_time + (.000694 * 31))
a esto:
to_char(date_and_time + (.000694 * 31), 'DD-MON-YYYY HH24:MI')
Parece que su formato de fecha predeterminado usa el código “HH” para la hora, no “HH24”.
Además, creo que su término constante es confuso e impreciso. Supongo que lo que hiciste es calcular que (.000694) es aproximadamente el valor de un minuto, y lo estás multiplicando por la cantidad de minutos que quieres agregar (31 en el ejemplo, aunque dijiste 30 en el texto).
También comenzaría con un día y lo dividiría en las unidades que desee dentro de su código. En este caso, (1/48) serían 30 minutos; o si quisiera dividirlo para mayor claridad, podría escribir ( (1/24) * (1/2) ).
Esto evitaría errores de redondeo (excepto los inherentes al punto flotante que no deberían tener sentido aquí) y es más claro, al menos para mí.
UPDATE "TABLE"
SET DATE_FIELD = CURRENT_TIMESTAMP + interval '48' minute
WHERE (...)
Dónde interval
es uno de
- AÑO
- MES
- DÍA
- HORA
- MINUTO
- SEGUNDO
Puntuaciones y comentarios
Si estás de acuerdo, tienes la libertad de dejar una crónica acerca de qué te ha gustado de esta crónica.