salve Cinzia,
cinziacip wrote:
Salve,
ho un problema....vorrei fare un confronto fra delle date presenti sul db e date che io compongo con parametri passati alla stored. In particolare passo alla stored due interi anno e mese e vorrei filtrare tutti quei record con campi "dataInzio" e "datafine" che comprendono il mese che io ho passato.
per ora ho creato la data del primo e ultimo giorno del mese passato (tipo 2010-06-01 00
0
0 e 2010-06-30 00
0
0) e poi ho fatto: where
NMS_assegnazioneCentroCosto_TB.assegnazioneCentroCosto_inizio<= convert(datetime, @giorno1,120)
and
NMS_assegnazioneCentroCosto_TB.assegnazioneCentroCosto_finePrevista >= convert(datetime,@giornoUltimo,120)
solo ceh in questo modo tutte le date di inizio che però cominciano dopo l'1 e tutte le date che finiscono prima dell'ultimo giorno del mese vengono escluse
ritenete che sia il caso di considerare il primo giorno del mese sulla data inizio e l'ultimo sulla data fine? e come posso
implementarlo?
spero di essere stata un pò chiara!
grazie cinzia
personalmente opererei direttamente con le funzioni specifiche sulle data previste da SQL Server, similarmente a
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.t (
Id int NOT NULL IDENTITY,
dataInizio date NOT NULL,
dataFine date NOT NULL
);
GO
DECLARE @i int = 0;
WHILE @i < 200 BEGIN
INSERT INTO dbo.t VALUES (DATEADD(DAY, @i, GETDATE()), DATEADD(DAY, @i + 20, GETDATE()));
SET @i += 1;
END;
GO
DECLARE @parMese int = 7;
DECLARE @parAnno int = 2010;
SELECT *
FROM dbo.t t
WHERE (DATEPART(YEAR, t.dataInizio) = @parAnno AND DATEPART(MONTH, t.dataInizio) = @parMese)
OR (DATEPART(YEAR, t.dataFine) = @parAnno AND DATEPART(MONTH, t.dataFine) = @parMese)
GO
DROP TABLE dbo.t;
saluti