Skip to content

Lista de dias del mes con SQL Server

2009 April 13
by Iaax Page

Autor: Rafal Skotak

http://www.sqlservercentral.com/scripts/61949/

Select dt_val from (
–Matriz cruzada de valores numericos
select
dateadd(dd, value, dateadd(month, 8 – 1, dateadd(year, 2008 – 1900, ’1900.01.01 00:00:00.000′))) as dt_val
from(
select (v2 * 4 + v1) * 4 + v0 as value from
(select 0 as v0 union select 1 union select 2 union select 3) as rs0 cross join
(select 0 as v1 union select 1 union select 2 union select 3) as rs1 cross join
(select 0 as v2 union select 1 union select 2 union select 3) as rs2
) as rs
–fin de matriz
) as rs2

where month(dt_val) = 8
order by dt_val

Encontré este script el día de ayer, buscando alternativas para un problema que necesito solucionar en mi trabajo.
Aunque no es la solución que actualmente necesito, es bastante bueno para la agilidad mental de la solución de problemas de datos en SQL

En si lo que estamos viendo es una tabla derivada, la cual convierte valores numéricos en fechas, es decir, la tabla mas interna es en si una matriz cruzada de valores, la cual servirá para proveer valores a la tabla derivada, para que esta a su vez utilice dichos valores en las funciones de conversión de fechas

El script se puede correr en dos partes para obtener un entendimiento mas amplio.

-Nota importante: Este script debe ser considerado EVIL SQL, ya que hace uso de una tecnica Cross Join, lo cual puede comprometer el desempeño de un proceso.

Iaax Page

One Response leave one →
  1. Carlos permalink
    May 31, 2010

    Muy gran aporte, ya lo revise y si es muy estable, Gracias!

Leave a Reply

Note: You can use basic XHTML in your comments. Your email address will never be published.

Subscribe to this comment feed via RSS