Sidebar

En este articulo muestro algunas técnicas para el calculo de fechas, como por ejemplo, el primer día del mes, el último día del mes y la forma de extraer el día de una semana sin importar el lenguaje que tengamos configurado en el manejador.

Calcular el día sin hora

SELECT DATEADD(day,DATEDIFF(day, 0, GETDATE()),0);

Aquí utilizo la función DATEDIFF para extraer el numero de días entre la fecha de hoy y el 1 de enero de 1900, posteriormente a este resultado le agregamos el numero de días que han pasado del 1 de enero de 1900 a la fecha actual. El resultado de esto es el día actual sin fecha y hora.

Calcular el primer día del mes

Utilizando la lógica anterior podemos extraer el primer día del mes, pero cambiando day, por month.

SELECT DATEADD(month,DATEDIFF(month, 0, GETDATE()),0);

Calcular el último día del mes

Este es muy similar al anterior, solamente la anexamos un mes y al final le restamos un día.

SELECT DATEADD(month, DATEDIFF(month, 0, GETDATE()) + 1, 0) - 1;

Calcular el primero día del año

SELECT DATEADD(year,DATEDIFF(year, 0, GETDATE()),0);

Calcular el último día del año

SELECT DATEADD(year,DATEDIFF(year, 0, GETDATE()) + 1, 0) - 1;

Calcular el inicio de la hora de ejecución

SELECT DATEADD(hour,DATEDIFF(hour, 0, GETDATE()),0);

Calcular el último minuto de la hora

SELECT DATEADD( minute, -1, DATEADD( hour, DATEDIFF(hour, 0, GETDATE
()) +1, 0) );

Calcular el día de la semana

Una de las necesidades cuando se trabajan con fechas, es el calcular el día de la semana de una fecha. Esto generalmente se necesita cuando por ejemplo se requieren extraer los registros colocados el Lunes.

La manera más común de hacer esto es usando la función DATENAME:

SELECT columna1, columna2 from tabla
WHERE DATENAME (weekday,columnafecha) = 'Monday'

El problema de este tipo de query, es que estamos amarrados al lenguaje configurado de SQL Server, si este fuera un sistema global donde se tienen diferentes lenguajes, como italiano, español, etc ya no sería útil. La manera de corregir esto sería mediante el siguiente query:

SET DATEFIRST 1
SELECT columna1, columna2 from tabla
WHERE DATEPART(weekday,columnafecha) = 1

Cuando usemos esto no olvidemos definir nuesro primer día de la semana mediante el comando:

SET DATEFIRST 1

Esto es importante ya que cuando tenemos el lenguaje ingles, el primer día de la semana por default es el 7 (Domingo) y cuando tenemos el español es el 1 (Lunes). Si no definimos esto al hacer nuestra conexión, vamos a tener resultados diferentes entre lenguajes.

Podemos revisar que día tenemos mediante el comando:

SELECT @@DATEFIRST


Tips BD