Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Numero de semana de un mes (https://www.clubdelphi.com/foros/showthread.php?t=62021)

paladincubano 01-12-2008 18:58:52

Numero de semana de un mes
 
Hola foreros.
En delphi, en la unit DateUtils hay una funcion que me devuelve de una fecha dada, su respectivo numero de semana en el mes (1,2,3,4 o 5).
La funcion es

function WeekOfTheMonth(const AValue: TDateTime): Word;

Me gustaria saber el equivalente en SQL. O sea, tengo un campo fecha en una tabla, me gustaria que cuando hiciera un SELECT me devolviera en un campo, ese valor, el numero de la semana en ese mes.

Serial algo asi

SQL.ADD('Select WeekOfTheMonth(FechaContrato) as A
Where A=')+NumeroSemana.Text;

Gracias.

ContraVeneno 01-12-2008 19:16:52

en SQL Server:
Código SQL [-]
Select DatePart(ww, getdate())

paladincubano 01-12-2008 19:26:39

Muchas gracias, manana cuando llegue al curro lo probare. Ahora en casa no tengo SQL.
Ya te digo si me funciona.
Editado:
Buscando en la ayuda he visto que no me sirve para lo que quiero. Ya que eso devuelve la semana del AÑO, y lo que me interesa que devuelva es la semana del MES.
Prueba la funcion que te di anteriormente para que veas lo que quiero.
saludos.

ContraVeneno 01-12-2008 19:38:38

tienes razón, no te va a servir, no me fije en el detalle que era "semana del mes", no semana del año...

paladincubano 01-12-2008 19:45:42

He encontrado dos formas.
Manana las probare y luego comento cual me sirvio, tiene que coincidir con el mismo valor que me devuelva la funcion en delphi, porque si no me trae problemas.

Pimer ejemplo:
No existe una funcion directa para hacer el calculo pero puedes usar el siguiente truco:
datepart(week, data) calcula el numero de la semana dentro del agno. El truco consiste en hallar la diferencia entre el numero de semana del primer dia del mes de la fecha que quieres calcular y la propia fecha.
El primer dia del mes de la fecha actual es:
select dateadd(dd,-day(getdate())+1,getdate())
Por tanto el numero de semana (para la fecha actual) se calcularia asi:
select datepart(week,getdate())
- datepart(week, dateadd(dd,-day(getdate())+1,getdate()))+1


2do ejemplo:
Con CONVERT(week,CAMPO_FECHA) puedes saber la semana del año. Si lo que quieres es saber la posición de la semana dentro del mes, es el resto de dividir este numero por 4.
SELECT CONVERT(week,CAMPO_FECHA)%4 te dá el modulo, es decir, el resto que buscas.


Si alguien ha probado alguno con buenos resultados me lo diga.
Gracias.


La franja horaria es GMT +2. Ahora son las 22:23:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi