12 messaggi dal 15 agosto 2001
Salve
qualcuno puo' indicarmi
come si effettua una query che ha in ingresso come parametri Mese e Anno e mi restituisce l'elenco di tutti i giorni festivi del mese e dell'anno passato come parametro ?

Grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
anflam ha scritto:
Salve
qualcuno puo' indicarmi
come si effettua una query che ha in ingresso come parametri Mese e Anno e mi restituisce l'elenco di tutti i giorni festivi del mese e dell'anno passato come parametro ?
Grazie

per queste problematiche solitamente si utilizzano tabelle "calendario", popolate con i giorni interessanti, eventuali constraint di gestione dipendenti dalle business rules relative ad eventuali overlapping per il recupero dei giorni (pagamento a n giorni data, etc..)

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
12 messaggi dal 15 agosto 2001
Grazie per la risposta
cmq se invece vorrei evitare di usare la tabella calendario e estrarre i giorni equivalenti al sabato e la domenica di quel mese?
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
anflam ha scritto:
Grazie per la risposta
cmq se invece vorrei evitare di usare la tabella calendario e estrarre i giorni equivalenti al sabato e la domenica di quel mese?


mi viene da pensare solo a porcherie...
ad esempio la seguente procedura, con parametri interi di mese e anno, popola una tabella temporanea e ritorna tutti i sabati e domeniche del mese utilizzando la funzione DATEPART( weekday , ... ) ...
continuo a non essere convinto della soluzione in quanto mancano ad esempio le festivita' nazionali, festivita' locali, festivita' aziendali e quant'altro...
ripeto... dovresti popolare una tabella calendario..
saluti

<----------->
IF OBJECT_ID ( 'dbo.usp_GiorniFestivi' ) <> 0
DROP PROCEDURE dbo.usp_GiorniFestivi
GO
CREATE PROCEDURE dbo.usp_GiorniFestivi (
@m int ,
@y int
)
AS BEGIN
/* procedura : dbo.usp_GiorniFestivi */
/* descrizione: */
/* procedura di estrazione dei fine settimana */
/* */
/* parametri : */
/* - @m int mese di ricerca */
/* - @y int anno di ricerca */
/* */
/* output : tabellare */
/* return : (null = 0) */

SET NOCOUNT ON
DECLARE @firstDay datetime , @lastDay datetime
DECLARE @currDateFirst int
CREATE TABLE #giorni ( giorno datetime )

-- ottiene il DATEFIRST corrente
SET @currDateFirst = @@DATEFIRST

-- triviale validazione dei parametri
IF @m IS NULL AND @y IS NULL GOTO HELP

IF @m IS NULL OR @m < 1 OR @m > 12
SET @m = DATEPART( m , GETDATE() )

IF @y IS NULL OR @y < 1970
SET @y = DATEPART( yy, GETDATE() )

-- primo ed ultimo giorno del mese interessante
SET @firstDay = CONVERT(varchar, @y) + RIGHT('0' + CONVERT( varchar, @m),2) + '01'
SET @lastDay = DATEADD( y, -1, DATEADD ( mm , 1 , @firstDay ))

-- popolamento della tabella temporanea
DECLARE @d datetime
SET @d = @firstDay
WHILE @d <= @lastDay BEGIN
INSERT INTO #giorni VALUES ( @d )
SET @d = DATEADD( d, 1 , @d )
END

-- impostazione del DATEFIRST
-- necessaro alla verifica
IF @currDateFirst <> 1
SET DATEFIRST 1

-- estrazione di domeniche e sabati
SELECT * --, DATEPART( weekday , giorno )
FROM #giorni
WHERE DATEPART( weekday , giorno ) = 7
OR DATEPART( weekday , giorno ) = 6

-- CLEANUP
-- ripristino del DATEFIRST originale
IF @currDateFirst <> @@DATEFIRST
SET DATEFIRST @currDateFirst

-- drop tabella temporanea
DROP TABLE #giorni

RETURN 0

HELP:
DECLARE @txt varchar(8000)

SET @txt =
'-- procedura : dbo.usp_GiorniFestivi' + CHAR(10) +
'-- descrizione:' + CHAR(10) +
'-- procedura di estrazione dei fine settimana' + CHAR(10) +
'--' + CHAR(10) +
'-- parametri :' + CHAR(10) +
'-- - @m int mese di ricerca' + CHAR(10) +
'-- - @y int anno di ricerca' + CHAR(10) + CHAR(10) +
'-- output : tabellare' + CHAR(10) +
'-- return : (null = 0)' + CHAR(10) + CHAR(10) +
'-- utilizzo :' + CHAR(10) +
'DECLARE @m int, @y int' + CHAR(10) +
'SELECT @m = MONTH(GETDATE()) , @y = YEAR(GETDATE())' + CHAR(10) +
'EXEC dbo.usp_GiorniFestivi @m , @y'

PRINT @txt
RETURN -1
END

-- Test
EXEC dbo.usp_GiorniFestivi 10 , 2005
EXEC dbo.usp_GiorniFestivi NULL , 2005
EXEC dbo.usp_GiorniFestivi 10 , NULL
EXEC dbo.usp_GiorniFestivi NULL , NULL
EXEC dbo.usp_GiorniFestivi 13 , 2005
EXEC dbo.usp_GiorniFestivi 0 , 2005

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.