Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

funcion trunc(DATE)

Estas en el tema de funcion trunc(DATE) en el foro de Oracle en Foros del Web. Wenas: Tengo una duda con la función trunc(DATE). Su funcionamiento está +/- claro, por ejemplo, en http://www.techonthenet.com/oracle/f...trunc_date.php , pero me queda la duda siguiente. Si ...
  #1 (permalink)  
Antiguo 07/03/2007, 05:28
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 4 meses
Puntos: 1
Pregunta funcion trunc(DATE)

Wenas:

Tengo una duda con la función trunc(DATE).

Su funcionamiento está +/- claro, por ejemplo, en http://www.techonthenet.com/oracle/f...trunc_date.php, pero me queda la duda siguiente.

Si se trunca la fecha, sin indicar el formato, devuelve la fecha sin horas, ¿esto quiere decir que si esta fecha "truncada" la comparas con otras fechas q SI lleven la hora, lo hará, comparando las 24 horas de la fecha "truncada".

Es decir, si dentro de una query cualquiera se hace algo asi

where trunc(campo_fecha) between fecha_inicio and fecha_final

siendo fecha_inicio y fecha_final campos de tipo date, con hora, el filtro sería comparar campo_fecha "truncada", por lo tanto, sin hora, con dos fechas q si la tienen, por lo q entiendo que campo_fecha es como si valiera para las 24 horas del día. Y si no es así, ¿como funciona realmente?

Pongo un ejemplo:

Hago una query con el filtro indicado arriba, y me devuelve 34 registros, todos con campo_fecha = 02/09/2005, mientras que si a dicho filtro, le quito el trunc de campo_fecha, me devuelve tan solo 5 registros, y todos con campo_fecha = 01/09/2005 (por supuesto, lo digo por si acaso, los campos que sirven como rango de fechas a comparar, en ambos casos tienen el mismo valor).

Absolutamente diferente.

Y algo más indicativo: si hago

where trunc(campo_fecha) between fecha_inicio and fecha_final

pero fecha_inicio y fecha_final no tienen hora, devuelve los 34 registros + los 5 q antes comenté.

La verdad es q estoy hecho un lio.

No tengo claro haberlo explicado correctamente, pero no es fácil hacerlo.

Salu2 y gracias.
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender
  #2 (permalink)  
Antiguo 07/03/2007, 08:59
Avatar de fjmasero  
Fecha de Ingreso: diciembre-2002
Mensajes: 488
Antigüedad: 21 años, 4 meses
Puntos: 1
Exclamación Re: funcion trunc(DATE)

Bueno, tras seguir investigando, he llegado a la siguiente conclusión, la cual expongo por si a alguien le sirve:

Lo q ocurre es q al realizar el trunc sobre la fecha+hora a comprobar, se le “quita” la hora, y entonces es como si se tratara de la misma fecha pero con hora 00:00:00.

Ejemplo:

Rango de fechas+horas para comprobar:
Inicio: 01/09/2005 09:00:00
Fin: 02/09/2005 00:01:00

d_client_status_set: 01/09/2005 12:21:47
trunc(d_client_status_set): 01/09/2005 (al “truncar”, la hora es 00:00:00)

Se comprueba q 01/09/2005 00:00:00 esté en el rango, y claro, no está, cuando en la realidad, la consulta si debería devolver este registro.

Y por el contrario, si fuera

d_client_status_set: 02/09/2005 16:37:14
trunc(d_client_status_set): 02/09/2005 (al “truncar”, la hora es 00:00:00)

Se comprueba q 02/09/2005 00:00:00 esté en el rango, y claro, está, cuando en la realidad, la consulta no debería devolver este registro.

Salu2
__________________
No es sabio el que sabe sino el que no sabe y quiere aprender
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:58.