Fechas

18/10/2006 - 20:02 por Pablo Rodríguez | Informe spam
Hola grupo, tengo una función la cuál me devolverá el resultado de una
consulta que a grandes rasgos sería algo así:

SELECT COUNT(*) AS Cantidad
FROM tblUno
WHERE IdDos IN (
SELECT Id
FROM tblDos
WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
)

Mi problema surge porque la función recibe el número de mes, (1..12), y el
número del año, entonces yo necesito convertir @Fecha1 en el primer día del
mes, (lo cual no es nada complicado), y @Fecha2 en el último día de ese
mes... y eso es lo que no he logrado hacer.


Saludos y agradezco por adelantado!!!

Preguntas similare

Leer las respuestas

#1 Pablo Rodríguez
18/10/2006 - 20:32 | Informe spam
Ya lo solucioné... sólo había que buscar una forma diferente de hacerlo,
reemplacé el BETWEEN por

WHERE DATEPART(MONTH, Fecha) = @Mes
AND DATEPART(YEAR, Fecha) = @Anio

____________________________________________________
"Pablo Rodríguez" escribió en el mensaje
news:%23iXUa%
Hola grupo, tengo una función la cuál me devolverá el resultado de una
consulta que a grandes rasgos sería algo así:

SELECT COUNT(*) AS Cantidad
FROM tblUno
WHERE IdDos IN (
SELECT Id
FROM tblDos
WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
)

Mi problema surge porque la función recibe el número de mes, (1..12), y el
número del año, entonces yo necesito convertir @Fecha1 en el primer día
del mes, (lo cual no es nada complicado), y @Fecha2 en el último día de
ese mes... y eso es lo que no he logrado hacer.


Saludos y agradezco por adelantado!!!

Respuesta Responder a este mensaje
#2 Sole
18/10/2006 - 21:03 | Informe spam
sino con la función DateAdd puedes hacer lo que mencionas al principio. Al
primer día le sumas 1 mes y le restas un día.

"Pablo Rodríguez" escribió en el mensaje
news:
Ya lo solucioné... sólo había que buscar una forma diferente de hacerlo,
reemplacé el BETWEEN por

WHERE DATEPART(MONTH, Fecha) = @Mes
AND DATEPART(YEAR, Fecha) = @Anio

____________________________________________________
"Pablo Rodríguez" escribió en el mensaje
news:%23iXUa%
Hola grupo, tengo una función la cuál me devolverá el resultado de una
consulta que a grandes rasgos sería algo así:

SELECT COUNT(*) AS Cantidad
FROM tblUno
WHERE IdDos IN (
SELECT Id
FROM tblDos
WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
)

Mi problema surge porque la función recibe el número de mes, (1..12), y
el número del año, entonces yo necesito convertir @Fecha1 en el primer
día del mes, (lo cual no es nada complicado), y @Fecha2 en el último día
de ese mes... y eso es lo que no he logrado hacer.


Saludos y agradezco por adelantado!!!





Respuesta Responder a este mensaje
#3 Alejandro Mesa
18/10/2006 - 22:03 | Informe spam
Pablo,

No te recomiendo que uses esa solucion porque al manipular la columna
[fecha] en la clausula "where" hace que SQL Server no use los indices de
forma optima. Dado un año y mes:

declare @a int
declare @m int
declare @p datetime
declare @u datetime

set @a = 2006
set @m = 10

set @p = ltrim(@a) + right('00' + ltrim(@m), 2) + '01'

set @u = dateadd(day, -1, dateadd(month, 1, @p))

select @p, @u
go

Si la columna [fecha] contiene tambien hora-minuto-segundo-milisegundo,
entonces usa este esquema.

select * from dbo.tu_tabla
where [fecha] >= cast(ltrim(@a) + right('00' + ltrim(@m), 2) + '01' as
datetime)
and [fecha] < dateadd(month, 1, cast(ltrim(@a) + right('00' + ltrim(@m), 2)
+ '01' as datetime))

Veamos un ejemplo practico. Si el mes y año es 200610, entonces el filtro
quedaria como:

...
where [fecha] >= '20061001' and [fecha] < '20061101'


AMB



"Pablo Rodríguez" wrote:

Ya lo solucioné... sólo había que buscar una forma diferente de hacerlo,
reemplacé el BETWEEN por

WHERE DATEPART(MONTH, Fecha) = @Mes
AND DATEPART(YEAR, Fecha) = @Anio

____________________________________________________
"Pablo Rodríguez" escribió en el mensaje
news:%23iXUa%
> Hola grupo, tengo una función la cuál me devolverá el resultado de una
> consulta que a grandes rasgos sería algo así:
>
> SELECT COUNT(*) AS Cantidad
> FROM tblUno
> WHERE IdDos IN (
> SELECT Id
> FROM tblDos
> WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
> )
>
> Mi problema surge porque la función recibe el número de mes, (1..12), y el
> número del año, entonces yo necesito convertir @Fecha1 en el primer día
> del mes, (lo cual no es nada complicado), y @Fecha2 en el último día de
> ese mes... y eso es lo que no he logrado hacer.
>
>
> Saludos y agradezco por adelantado!!!
>



Respuesta Responder a este mensaje
#4 Pablo Rodríguez
23/10/2006 - 22:02 | Informe spam
Gracias Alejandro,
no sabía que podía tener ese problema,
por suerte siempre hay alguien que sabe algo más!!!

Saludos!



"Alejandro Mesa" escribió en el
mensaje news:
Pablo,

No te recomiendo que uses esa solucion porque al manipular la columna
[fecha] en la clausula "where" hace que SQL Server no use los indices de
forma optima. Dado un año y mes:

declare @a int
declare @m int
declare @p datetime
declare @u datetime

set @a = 2006
set @m = 10

set @p = ltrim(@a) + right('00' + ltrim(@m), 2) + '01'

set @u = dateadd(day, -1, dateadd(month, 1, @p))

select @p, @u
go

Si la columna [fecha] contiene tambien hora-minuto-segundo-milisegundo,
entonces usa este esquema.

select * from dbo.tu_tabla
where [fecha] >= cast(ltrim(@a) + right('00' + ltrim(@m), 2) + '01' as
datetime)
and [fecha] < dateadd(month, 1, cast(ltrim(@a) + right('00' + ltrim(@m),
2)
+ '01' as datetime))

Veamos un ejemplo practico. Si el mes y año es 200610, entonces el filtro
quedaria como:

...
where [fecha] >= '20061001' and [fecha] < '20061101'


AMB



"Pablo Rodríguez" wrote:

Ya lo solucioné... sólo había que buscar una forma diferente de hacerlo,
reemplacé el BETWEEN por

WHERE DATEPART(MONTH, Fecha) = @Mes
AND DATEPART(YEAR, Fecha) = @Anio

____________________________________________________
"Pablo Rodríguez" escribió en el mensaje
news:%23iXUa%
> Hola grupo, tengo una función la cuál me devolverá el resultado de una
> consulta que a grandes rasgos sería algo así:
>
> SELECT COUNT(*) AS Cantidad
> FROM tblUno
> WHERE IdDos IN (
> SELECT Id
> FROM tblDos
> WHERE Fecha BETWEEN @Fecha1 AND @Fecha2
> )
>
> Mi problema surge porque la función recibe el número de mes, (1..12), y
> el
> número del año, entonces yo necesito convertir @Fecha1 en el primer día
> del mes, (lo cual no es nada complicado), y @Fecha2 en el último día de
> ese mes... y eso es lo que no he logrado hacer.
>
>
> Saludos y agradezco por adelantado!!!
>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida