3
Algunas Técnicas Obtenidas de la revista SQLMagazine marzo 2007 – junio 2007 or #en$%an& Años como Números Enteros 0 – es el 0'(0'(')00 *ue +ue L,-.S '$ 02(0'(')00 MA/T.S 2$ 0 (0'(')00 M!./1OL.S 0 (0'(')00 3,.4.S 05(0'(')00 4!./-.S 5 – 06(0'(')00 SA#A O 6$ 07(0'(')00 OM!-%O Extrayendo la parte de fecha a un valor DATETIME al 0'(0'(')00 le sumo la cantidad de dias *ue transcurrieron a 8o9 S.L.1T AT.A :da9; AT. !<<:da9;0;%.T AT.:==;0= ; obteniendo la +ec8a de 8o9 sin la 8ora& Obteniendo el primer da del mes .n +orma an>loga ; obtenemos la cantidad de meses entre una +ec8a +ija : 0'(0'(') luego se la sumamos; llevando al rimer d?a del mes S.L.1T AT.A :mont8; AT. !<<:mont8;0;%.T AT.:==;0= Obteniendo el ultimo dia del mes Obtenemos el rimer dia del mes del mes siguiente; 9 le restamos un d?a S.L.1T AT.A :mont8; AT. !<<:mont8;0;getdate:==@';0=$' e +orma analoga obtenemos el comien!o de la hora S.L.1T AT.A : O,/; AT. !<<: O,/;0;%.T AT.:==;0= Da de la semana "Independiente del len#ua$e

SQL -Operaciones Con Fechas « Machetes Varios

  • Upload
    daaha2

  • View
    215

  • Download
    0

Embed Size (px)

DESCRIPTION

mysql

Citation preview

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