Calcolo del primo giorno del mese successivo

giovedì 26 giugno 2008 - 10.55

trinity Profilo | Guru

Salve ragazzi,
partendo da questa funzione:

CREATE FUNCTION [dbo].[GetFirstMonthDay_1](
@Today datetime
)
RETURNS datetime
BEGIN
RETURN DATEADD(month, DATEDIFF(month, 0, @Today), 0);
END

io ho come data per esempio 05/05/2008 tramite una funzione devo determinare il primo giorno del mese successivo, ossia 01/06/2008

Come posso fare?
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Salve ragazzi,
Ciao!

>io ho come data per esempio 05/05/2008 tramite una funzione devo
>determinare il primo giorno del mese successivo, ossia 01/06/2008
>Come posso fare?
Prova a dare un'occhiata al seguente esempio:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

trinity Profilo | Guru

io ho fatto così:

CREATE FUNCTION [dbo].[GetFirstMonthDay_1] (@Date datetime) RETURNS datetime WITH EXECUTE AS CALLER AS BEGIN DECLARE @DateInt datetime SET @DateInt = DATEADD(day, -1, DATEADD(month, 1, CONVERT(char( 6),@Date, 112) + '01')+1) RETURN(@DateInt) END

dimmi se va bene, a me funziona
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>DECLARE @DateInt datetime
>SET @DateInt = DATEADD(day, -1, DATEADD(month, 1, CONVERT(char(6),@Date, 112) + '01')+1)
>RETURN(@DateInt)
Scusa ma perchè elimini un giorno e poi lo riaggiungi? Tieni solo:

DECLARE @DateInt datetime SET @DateInt = DATEADD(month, 1, CONVERT(char(6),@Date, 112) + '01') select @dateint
--

Alessandro Alpi | SQL Server MVP

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

lbenaglia Profilo | Guru

>Come posso fare?

Ciao Fabio,

Mi sembra di capire che non hai capito il funzionamento di quella funzione (eppure te lo avevo spiegato e mi avevi dato conferma di averla capita ).
Quella funzione non fa altro che calcolare il numero di mesi intercorsi dall'1 gennaio 1900 alla data passata come argomento; successivamente somma questi mesi nuovamente all'1 gennaio 1900, ottenendo di conseguenza il primo del mese.
Ora, se vuoi ottenere il primo del mese successivo, somma 1 al numero di mesi:

USE tempdb; GO CREATE FUNCTION dbo.GetFirstNextMonthDay( @Today datetime ) RETURNS datetime BEGIN RETURN DATEADD(month, DATEDIFF(month, 0, @Today) + 1, 0); END GO SELECT dbo.GetFirstNextMonthDay(CURRENT_TIMESTAMP) AS FirstNextMonthDay; /* Output: FirstNextMonthDay ----------------------- 2008-07-01 00:00:00.000 (1 row(s) affected) */ DROP FUNCTION dbo.GetFirstNextMonthDay;

E' chiaro?!

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

Sisi Lorenzo avevo capito ed ho capito...solo che oggi sono fuso di testa e ho aperto inutilmente questo post perchè da solo avevo già risolto tra parentesi come ha detto te.

Visto che ci sto ho aperto qualche giorno fa un post molto importante mica puoi darci un'occhiata?


ecco il link diretto:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=23763

Grazie ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5