Transcript

Algunas Tcnicas Obtenidas de la revista SQLMagazine marzo 2007 junio 2007 por Itzik Ben-Gan.Aos como Nmeros Enteros0 es el 01/01/1900 que fue LUNES1- 02/01/1900 MARTES2- 03/01/1900 MIERCOLES3 04/01/1900 JUEVES4 05/01/1900 VIERNES5 06/01/1900 SABADO6- 07/01/1900 DOMINGOExtrayendo la parte de fecha a un valor DATETIMEal 01/01/1900 le sumo la cantidad de dias que transcurrieron a hoySELECT DATEADD(day,DATEDIFF(day,0,GETDATE()),0) , obteniendo la fecha de hoy sin la hora.Obteniendo el primer da del mesEn forma anloga , obtenemos la cantidad de meses entre una fecha fija ( 01/01/1900) y luego se la sumamos, llevando al primer da del mesSELECT DATEADD(month,DATEDIFF(month,0,GETDATE()),0)Obteniendo el ultimo dia del mesObtenemos el primer dia del mes del mes siguiente, y le restamos un daSELECT DATEADD(month,DATEDIFF(month,0,getdate())+1,0)-1De forma analoga obtenemos el comienzo de la horaSELECT DATEADD(HOUR,DATEDIFF(HOUR,0,GETDATE()),0)Da de la semana -Independiente del lenguajeweekday retonarna distintos valores segn el lenguaje en que est seteada la sesin, o la variable @@DATEFIRSTUna forma de que traiga valores independientes de ste seteo es:SELECT DATEDIFF(day,0,GETDATE())%7+1O sea el resto de dividir los das entre el 01-1-1900 ( lunes) y una fecha determinada( en el ejemplo ahora ) en 7 +1sto devolvera 1 para lunes, 2 para martes 7 para domingoltima ocurrencia de un da de la semana determinadoEsta expresion calcula la cantidad de das entre una fecha fija Lunes ( 01-01-1900) y la fecha de hoy, restandole los das que pasaron del ltimo lunes.SELECT DATEDIFF(day,0,GETDATE())/7*7Entonces, para llegar al ultimo lunes, tomo esa fecha base y le agrego los das obtenidos en la expresion anteriorSELECT DATEADD(DAY,DATEDIFF(day,0,GETDATE())/7*7,0)Si quisiera ver lo mismo para el martes anterior, seraSELECT DATEADD(day,DATEDIFF(day,1,GETDATE())/7*7,1) (inclusiva)Esta expresion es inclusiva, es decir si busco el ultimo lunes y resulta que hoy es lunes, retonarnar la fecha de hoySi quiero ver la equivalente exclusiva, es decir, si hoy es martes retonarnar el martes anterior al presente, restar uno a la fechaSELECT DATEADD(day,DATEDIFF(day,1,GETDATE()-1)/7*7,1) (exclusiva)Prxima Ocurrencia de un da de la semanaFormula inclusiva: se obtiene de agregar 7 a la forma exclusiva de la ultima ocurrenciaSELECT DATEADD(day,DATEDIFF(day,1,GETDATE()-1)/7*7+7,1)Formula exclusiva: se obtiene agregando 7 a la forma inclusiva de la ultima ocurrenciaSELECT DATEADD(day,DATEDIFF(day,1,GETDATE())/7*7+7,1)Clculo del primer o ltimo da de la semana de un mesHay que encontrar el primer da del presente mes y luego encontrar el prximo da de la semana buscado ( ej. lunes ) respecto a lSELECT DATEADD(day,DATEDIFF(day,0,GETDATE()-1)/7*7+7,0) proximo lunesSELECT DATEADD(month,DATEDIFF(month,0,GETDATE()),0) primer da del mesMetiendo la segunda frmula dentro de la primera, obtenemos el primer lunes del corriente mes:SELECT DATEADD(day,DATEDIFF(day,0,DATEADD(month,DATEDIFF(month,0,GETDATE()),0)-1)/7*7+7,0)Se pueden obtener de forma anloga el ltimo da de semana de un mes.Con combinaciones similares se puede obtener el primer y ltimo da de semana de un ao


Top Related