DATE_BUCKET y DATETRUNC
La última versión del SQL Server, la 2022, trae consigo muchas novedades y hoy os vengo a hablar de un par de nuevas funciones de fechas que que me ha sorprendido porque viene a agilizar mucho las consultas basadas en fechas: DATE_BUCKET y DATETRUNC.
Empecemos conociendo el DATETRUNC que para mi es la más sencilla de entender.
Su sintaxis es:
DATETRUNC (datepart, fecha)
Esta función devuelve la fecha de entrada según el datepart indicado. Es decir, por ejemplo, si indicas year te devolverá el 1 de Enero de ese año o si indicas month, el 1 del més.
Está muy bien porque acepta como tipo de dato de la entrada diferentes precisiones de fechas, respetándola en la salida, e incluso acepta que le pases una cadena literal, siempre que pueda resolverse como tipo datetime2(7).
El DATE_BUCKET en cierto modo es muy parecido a esta función, pero como veremos tiene algún matiz diferente.
Su sintaxis es:
DATE_BUCKET (datepart, numero, fecha[, origen] )
La definición que hace Microsoft sobre esta función es:
Esta función devuelve el valor de fecha y hora correspondiente al inicio de cada cubo de fecha y hora, desde la marca de tiempo definida por el parámetro
origen
o el valor de origen predeterminado de1900-01-01 00:00:00.000
, si el parámetro de origen no se ha especificado.
A mi me con esta definición, la verdad es que me costó entender qué hacía realmente y hasta que no empecé a hacer pruebas no lo entendí. A ver si consigo definirlo de forma que lo entendáis. El DATE_BUCKET devuelve lo mismo que el DATETRUNC si pusiéramos el parámetro numero a 1. Es decir, devuelve una fecha de inicio según el datepart indicado, sólo que adaptando al numero de unidades indicado.
Veamos qué ocurre si en vez de un 1, ponemos un 5.
El resultado es que nos agrupa en bloques de 5 unidades de tiempo. Esto nos permite, por ejemplo, hacer consultas en las que podemos agrupar los registros por bloques de 5 minutos, por días o meses. De esta forma se simplifican mucho las consultas de este estilo
Como indicaba anteriormente con esta función ahora es mucho más sencillo. Antes, para hacer esto mismo teníamos que jugar con el Datepart pero solo sacaba año, mes o día cada vez y si queríamos más cosas juntas, había que concatenar columnas.
Aquí os dejo los links a la documentación de Microsoft, para que la leáis en detalle y sobre todo os fijéis en los ejemplo.
No se si os pasará como a mí, que a pesar de que cuando sale una versión nueva os leéis las novedades, siempre pasa desapercibido algo que de repente algún compañero os descubre y a partir de ese momento no podéis vivir sin ello. Para mí este ha sido uno de esos casos y por eso lo he querido compartir con vosotros. ¡Espero que os sea de utilidad!