una operaciones obtener mes manejo insertar hora fechas fecha ejemplo con año sql-server date temp-tables procedure

operaciones - Cómo obtener una tabla de fechas entre x y y en sql server 2005



obtener mes y año de una fecha sql (9)

Creo que estás buscando esta publicación de blog .

Solo quiero una forma rápida (y preferiblemente no usar un bucle while) de crear una tabla de cada fecha entre la fecha @x y la fecha @y para que pueda dejar la combinación externa en algunas tablas de estadísticas, algunas de las cuales no tendrán registros para cierta días en el medio, lo que me permite marcar los días perdidos con un 0


Creo que también podrías hacerlo en un ciclo while. Sé que es feo, pero es fácil y funciona.


Estaba haciendo algo similar hace un tiempo, pero no pude encontrar una forma que no utilizara un loop.

Lo mejor que obtuve fue una tabla temporal, y luego seleccioné las fechas en las que quería unirme a eso.

El blog bduke vinculado es lindo, aunque creo que la solución de tabla temporal es quizás una solución más limpia.


Estrictamente hablando, esto no responde exactamente a su pregunta, pero es bastante limpio.

Asumiendo que puede vivir especificando el número de días después de la fecha de inicio, usar una Expresión de tabla común le brinda:

WITH numbers ( n ) AS ( SELECT 1 UNION ALL SELECT 1 + n FROM numbers WHERE n < 500 ) SELECT DATEADD(day,n-1,''2008/11/01'') FROM numbers OPTION ( MAXRECURSION 500 )


He encontrado otra tabla que almacena cada fecha (son los visitantes del sitio web), así que ¿qué tal esto ...

Declare @FromDate datetime, @ToDate datetime Declare @tmpDates table (StatsDate datetime) Set @FromDate = DateAdd(day,-30,GetDate()) Set @ToDate = GetDate() Insert Into @tmpDates (StatsDate) Select distinct CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME) FROM tbl_visitorstats Where visitDate between @FromDate And @ToDate Order By CAST(FLOOR(CAST(visitDate AS DECIMAL(12, 5))) AS DATETIME) Select * FROM @tmpDates

Depende de que la otra tabla tenga una entrada para cada fecha que deseo, pero es 98% probable que haya datos para cada día.


Justo: DONDE col> fecha de inicio AND col <fecha de finalización


Solo escribe el ciclo. Alguien tiene que escribir un bucle para esto, ya sea usted o SQL Server.

DECLARE @Dates TABLE ( TheDate datetime PRIMARY KEY ) DECLARE @StartDate datetime, @EndDate datetime SELECT @StartDate = ''2000-01-01'', @EndDate = ''2010-01-01'' DECLARE @LoopVar int, @LoopEnd int SELECT @LoopEnd = DateDiff(dd, @StartDate, @EndDate), @LoopVar = 0 WHILE @LoopVar <= @LoopEnd BEGIN INSERT INTO @Dates (TheDate) SELECT DateAdd(dd,@LoopVar,@StartDate) SET @LoopVar = @LoopVar + 1 END SELECT * FROM @Dates


Yo crearía una tabla de Calendario que solo contenía cada fecha desde una fecha de inicio adecuada hasta una fecha de finalización adecuada. Esto no ocuparía mucho espacio en su base de datos y haría que estos tipos de consultas sean un juego de niños.

select ... from Calendar left outer join ... where Calendar.Date >= @x and Calendar.Date <= @y


Un ligero giro en la respuesta dada como https://.com/a/95728/395440 . Permite especificar días y también calcula el rango hasta la fecha actual.

DECLARE @startDate datetime SET @startDate = ''2015/5/29''; WITH number ( n ) AS ( SELECT 1 UNION ALL SELECT 1 + n FROM dates WHERE n < DATEDIFF(Day, @startDate, GETDATE()) ) SELECT DATEADD(day,n-1,@startDate) FROM number where datename(dw, DATEADD(day,n-1,@startDate)) in (''Monday'', ''Tuesday'', ''Wednesday'', ''Thursday'', ''Friday'') OPTION ( MAXRECURSION 500 )