Translate

jueves, 2 de enero de 2014

Oracle: Query para restar minutos a la fecha del sistema

La problemática de hoy viene dada por la necesidad de recuperar en una base de datos Oracle los usuarios que han tenido interacción con la aplicación en los últimos 15 minutos.

En mi caso tengo un campo en mi tabla de usuarios que registra cuando ha sido la última actualización o acceso de este usuario a la aplicación.

La query a realizar se la siguiente:

SELECT * FROM users WHERE LAST_UPDATED_DATE > SYSTIMESTAMP - (?/1440)

Donde ? tenemos que sustituirlo por el número de minutos que queremos restar a la fecha del sistema.

SYSTIMESTAMP nos devuelve la fecha del sistema incluyendo hora minutos y segundos con el TimeZone de la base de datos.

El valor de 1440 es porque un día tiene 1440 minutos 24 x 60. Y usamos minutos en este formato ya que lo que se resta normalmente a SYSTIMESTAMP son días.

Por lo tanto mi query final es la siguiente:

PreparedStatement pstmt = null;       
ResultSet rSet = null;
Connection conn = null;        
int minutes = 15;
........
........
String strSQL="select from users where LAST_UPDATED_DATE > SYSTIMESTAMP-(?/1440)";

pstmt = conn.prepareStatement(strSQL);
pstmt.setInt(1, minutes);                     
rSet = pstmt.executeQuery();

Referencias:

Time Aritmetic with Oracle
SYSTIMESTAMP 

No hay comentarios:

Publicar un comentario