segundo martes de un mes

10/03/2008 - 18:48 por Jaime Lucci | Informe spam
Hola a todos!!

Alguien sabe como puedo sacar que día es el segundo martes de un mes??

Por ejemplo, el segundo martes de Marzo08 es 11.

Saludos!

Jaime Lucci
jaimelucci@hotmail.com

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
10/03/2008 - 18:48 | Informe spam
Jaime Lucci,

Que tal usando una tabla calendario.

;with cte
as
(
select *, row_number() over(order by fecha ASC) as rn
from dbo.Calendario
where año = 2008 and mes = 3 and dia_semana = 'martes'
)
select *
from cte
where rn = 2;
go


Why should I consider using an auxiliary calendar table?
http://sqlserver2000.databases.aspf...table.html

AMB




"Jaime Lucci" wrote:

Hola a todos!!

Alguien sabe como puedo sacar que día es el segundo martes de un mes??

Por ejemplo, el segundo martes de Marzo08 es 11.

Saludos!

Jaime Lucci




Respuesta Responder a este mensaje
#2 Gux (MVP)
10/03/2008 - 19:18 | Informe spam
En esta página de Marcos Montes se muestran algoritmos para hacer los
cálculos, divertido para ejercicio de programación :-)

The American Secular Holidays Calendar
http://www.smart.net/~mmontes/ushols.html

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alejandro Mesa" wrote:

Jaime Lucci,

Que tal usando una tabla calendario.

;with cte
as
(
select *, row_number() over(order by fecha ASC) as rn
from dbo.Calendario
where año = 2008 and mes = 3 and dia_semana = 'martes'
)
select *
from cte
where rn = 2;
go


Why should I consider using an auxiliary calendar table?
http://sqlserver2000.databases.aspf...table.html

AMB




"Jaime Lucci" wrote:

> Hola a todos!!
>
> Alguien sabe como puedo sacar que día es el segundo martes de un mes??
>
> Por ejemplo, el segundo martes de Marzo08 es 11.
>
> Saludos!
>
> Jaime Lucci
>
>
>
>
Respuesta Responder a este mensaje
#3 Alejandro Mesa
10/03/2008 - 19:51 | Informe spam
Gustavo,

Gracias por el link.

La tarea de adaptar la formula a T-SQL se la dejo a Jaime y espero que tenga
en cuenta el valor de @@DATEFIRST.

AMB

"Gux (MVP)" wrote:

En esta página de Marcos Montes se muestran algoritmos para hacer los
cálculos, divertido para ejercicio de programación :-)

The American Secular Holidays Calendar
http://www.smart.net/~mmontes/ushols.html

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Alejandro Mesa" wrote:

> Jaime Lucci,
>
> Que tal usando una tabla calendario.
>
> ;with cte
> as
> (
> select *, row_number() over(order by fecha ASC) as rn
> from dbo.Calendario
> where año = 2008 and mes = 3 and dia_semana = 'martes'
> )
> select *
> from cte
> where rn = 2;
> go
>
>
> Why should I consider using an auxiliary calendar table?
> http://sqlserver2000.databases.aspf...table.html
>
> AMB
>
>
>
>
> "Jaime Lucci" wrote:
>
> > Hola a todos!!
> >
> > Alguien sabe como puedo sacar que día es el segundo martes de un mes??
> >
> > Por ejemplo, el segundo martes de Marzo08 es 11.
> >
> > Saludos!
> >
> > Jaime Lucci
> >
> >
> >
> >
Respuesta Responder a este mensaje
#4 Alejandro Mesa
11/03/2008 - 00:13 | Informe spam
Jaime Lucci,

Si por alguna razon se necesita cambiar el ese codigo, espero no ser yo
quien lo tenga que hacer :-).


AMB

"Jaime Lucci" wrote:

Hola Gustavo. Gracias por el Link

Te paso la modificacion para SQL que hice, lo puse en una función. se pasa un orden y un dia determinado, por ejemplo, quiero saber que fecha es el primer lunes del mes actual: (@norden va 1, 2, 3, 4 ó 5) (@ndia va 0: domingo a 6: sábado)

Para lo que lo necesitaba es para un calendario festivo, para saber si el dia actual (getdate()) corresponde al @norden @ndia del mes actual.

PD: Gracias a Alejandro también, pero en este caso no necesito preocuparme por el valor de @@DATEFIRST.

ALTER FUNCTION dbo.OrdenDia(@norden INT, @ndia INT) RETURNS DATETIME
AS
BEGIN


DECLARE @ndiacalculado INT,
@nsumarsemana INT


SET @nsumarsemana = 7*1 - 6 + (@ndia - ((1 + (year(getdate()) - (14 - month(getdate())) / 12) + (year(getdate()) - (14 - month(getdate())) / 12)/4 - (year(getdate()) - (14 - month(getdate())) / 12)/100 + (year(getdate()) - (14 - month(getdate())) / 12)/400 + (31*(month(getdate()) + 12*((14 - month(getdate())) / 12) - 2))/12) % 7))%7

IF @nsumarsemana < 0
SET @nsumarsemana = 7
ELSE
SET @nsumarsemana = 0

SET @ndiacalculado = 7*@norden - 6 + (@ndia - ((1 + (year(getdate()) - (14 - month(getdate())) / 12) + (year(getdate()) - (14 - month(getdate())) / 12)/4 - (year(getdate()) - (14 - month(getdate())) / 12)/100 + (year(getdate()) - (14 - month(getdate())) / 12)/400 + (31*(month(getdate()) + 12*((14 - month(getdate())) / 12) - 2))/12) % 7))%7 + @nsumarsemana

IF @ndiacalculado < 0
SET @ndiacalculado = @ndiacalculado + 7

RETURN CAST(LTRIM(RTRIM(STR(YEAR(GETDATE())))) + '-' + RIGHT('0' + LTRIM(RTRIM(STR(MONTH(GETDATE())))),2) + '-' + RIGHT('0' + LTRIM(RTRIM(STR(@ndiacalculado))),2) AS DATETIME)

END


"Gux (MVP)" escribió en el mensaje news:
> En esta página de Marcos Montes se muestran algoritmos para hacer los
> cálculos, divertido para ejercicio de programación :-)
>
> The American Secular Holidays Calendar
> http://www.smart.net/~mmontes/ushols.html
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/profile/gux
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Alejandro Mesa" wrote:
>
> > Jaime Lucci,
> >
> > Que tal usando una tabla calendario.
> >
> > ;with cte
> > as
> > (
> > select *, row_number() over(order by fecha ASC) as rn
> > from dbo.Calendario
> > where año = 2008 and mes = 3 and dia_semana = 'martes'
> > )
> > select *
> > from cte
> > where rn = 2;
> > go
> >
> >
> > Why should I consider using an auxiliary calendar table?
> > http://sqlserver2000.databases.aspf...table.html
> >
> > AMB
> >
> >
> >
> >
> > "Jaime Lucci" wrote:
> >
> > > Hola a todos!!
> > >
> > > Alguien sabe como puedo sacar que día es el segundo martes de un mes??
> > >
> > > Por ejemplo, el segundo martes de Marzo08 es 11.
> > >
> > > Saludos!
> > >
> > > Jaime Lucci
> > >
> > >
> > >
> > >
Respuesta Responder a este mensaje
#5 Gux (MVP)
11/03/2008 - 13:18 | Informe spam
Jaime, gracias por compartir su código.

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/profile/gux
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jaime Lucci" wrote:

Hola Gustavo. Gracias por el Link

Te paso la modificacion para SQL que hice, lo puse en una función. se pasa un orden y un dia determinado, por ejemplo, quiero saber que fecha es el primer lunes del mes actual: (@norden va 1, 2, 3, 4 ó 5) (@ndia va 0: domingo a 6: sábado)

Para lo que lo necesitaba es para un calendario festivo, para saber si el dia actual (getdate()) corresponde al @norden @ndia del mes actual.

PD: Gracias a Alejandro también, pero en este caso no necesito preocuparme por el valor de @@DATEFIRST.

ALTER FUNCTION dbo.OrdenDia(@norden INT, @ndia INT) RETURNS DATETIME
AS
BEGIN


DECLARE @ndiacalculado INT,
@nsumarsemana INT


SET @nsumarsemana = 7*1 - 6 + (@ndia - ((1 + (year(getdate()) - (14 - month(getdate())) / 12) + (year(getdate()) - (14 - month(getdate())) / 12)/4 - (year(getdate()) - (14 - month(getdate())) / 12)/100 + (year(getdate()) - (14 - month(getdate())) / 12)/400 + (31*(month(getdate()) + 12*((14 - month(getdate())) / 12) - 2))/12) % 7))%7

IF @nsumarsemana < 0
SET @nsumarsemana = 7
ELSE
SET @nsumarsemana = 0

SET @ndiacalculado = 7*@norden - 6 + (@ndia - ((1 + (year(getdate()) - (14 - month(getdate())) / 12) + (year(getdate()) - (14 - month(getdate())) / 12)/4 - (year(getdate()) - (14 - month(getdate())) / 12)/100 + (year(getdate()) - (14 - month(getdate())) / 12)/400 + (31*(month(getdate()) + 12*((14 - month(getdate())) / 12) - 2))/12) % 7))%7 + @nsumarsemana

IF @ndiacalculado < 0
SET @ndiacalculado = @ndiacalculado + 7

RETURN CAST(LTRIM(RTRIM(STR(YEAR(GETDATE())))) + '-' + RIGHT('0' + LTRIM(RTRIM(STR(MONTH(GETDATE())))),2) + '-' + RIGHT('0' + LTRIM(RTRIM(STR(@ndiacalculado))),2) AS DATETIME)

END


"Gux (MVP)" escribió en el mensaje news:
> En esta página de Marcos Montes se muestran algoritmos para hacer los
> cálculos, divertido para ejercicio de programación :-)
>
> The American Secular Holidays Calendar
> http://www.smart.net/~mmontes/ushols.html
>
> Gustavo Larriera, Microsoft MVP
> https://mvp.support.microsoft.com/profile/gux
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Alejandro Mesa" wrote:
>
> > Jaime Lucci,
> >
> > Que tal usando una tabla calendario.
> >
> > ;with cte
> > as
> > (
> > select *, row_number() over(order by fecha ASC) as rn
> > from dbo.Calendario
> > where año = 2008 and mes = 3 and dia_semana = 'martes'
> > )
> > select *
> > from cte
> > where rn = 2;
> > go
> >
> >
> > Why should I consider using an auxiliary calendar table?
> > http://sqlserver2000.databases.aspf...table.html
> >
> > AMB
> >
> >
> >
> >
> > "Jaime Lucci" wrote:
> >
> > > Hola a todos!!
> > >
> > > Alguien sabe como puedo sacar que día es el segundo martes de un mes??
> > >
> > > Por ejemplo, el segundo martes de Marzo08 es 11.
> > >
> > > Saludos!
> > >
> > > Jaime Lucci
> > >
> > >
> > >
> > >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida