Some SQL date calculation scripts for NAV Linked Tables


Some SQL date calculation scripts for NAV Linked Tables

sql date

Dato che alcuni utilizzano le viste SQL come tabelle collegate in NAV, riporto alcuni script SQL relativi all’utilizzo delle date; inserendo un campo virtuale in una vista SQL e richiamando una “function” esistente o personalizzata nel campo (es: la uf_DaysDifference sotto indicata) è possibile creare delle viste SQL molto utili da utilizzare in NAV.

esempio di alcune viste da me utilizzate in cruscotti di avanzamento
– Avanzamento Ordini Vendita\Acquisto\Commesse\Timesheets
– Avanzamento Fasi di Produzione
– Avanzamento Shop Floor etc..

SQL Date Scripts

Calcolare l’ultimo giorno di un mese

DECLARE @oggi DATETIME
SET @oggi = GETDATE()

SELECT CONVERT(varchar, DATEADD ( dd , -1 , CONVERT (VARCHAR(6), DATEADD( mm , 1 , @oggi ) , 112 ) + ’01’ ) ,103)

Se @oggi = 09/01/2016
La select ritorna = 31/01/2016

Details:
— Aggiungo 1 mese alla data odierna:
SELECT DATEADD( mm , 1 , getdate())

— Visualizzo la data senza il giorno:
SELECT CONVERT (VARCHAR(6), DATEADD( mm , 1 , getdate()) , 112 )

— Imposto il primo giorno del mese:
SELECT CONVERT (VARCHAR(6), DATEADD( mm , 1 , getdate()) , 112 ) + ’01’

— Tolgo 1 giorno dalla data ottenuta:
SELECT DATEADD ( dd , -1 , CONVERT (VARCHAR(6), DATEADD( mm , 1 , getdate()) , 112 ) + ’01’ )

— Formatto il risultato in italiano (gg/mm/aaaa):
SELECT CONVERT(varchar, DATEADD ( dd , -1 , CONVERT (VARCHAR(6), DATEADD( mm , 1 , getdate()) , 112 ) + ’01’ ) ,103)

Calcolare il numero giorni di un mese

declare @data datetime
set @data = getdate()

select day(dateadd(month,1,@data)-(day(@data)-1)-1) as NumGiorniMese

— Trovo la data da elaborare aumentata di un mese:
select dateadd(month,1,@data)
— Imposto la nuova data con giorno = 1:
select dateadd(month,1,@data)-(day(@data)-1)
— Tolgo un giorno alla data:
select dateadd(month,1,@data)-(day(@data)-1)-1
— Leggo il numero di giorni:
select day(dateadd(month,1,@data)-(day(@data)-1)-1)

Calcolare differenza giorni

/* Differenza in giorni */
CREATE FUNCTION uf_DaysDifference (@dataIniziale DATETIME, @dataFinale DATETIME)
RETURNS INT
AS
BEGIN
RETURN
(
SELECT CASE WHEN
DATEADD(DAY, DATEDIFF(DAY, @dataIniziale, @dataFinale), @dataIniziale) > @dataFinale
THEN DATEDIFF(DAY, @dataIniziale, @dataFinale) – 1
ELSE DATEDIFF(DAY, @dataIniziale, @dataFinale) END
)
END
GO

/* Ad esempio: */
select dbo.uf_DaysDifference(‘20160109′,’20160114’) as NumGiorni
select dbo.uf_DaysDifference(‘20060109’,getdate()) as NumGiorni
select dbo.uf_DaysDifference(‘20060109’,CURRENT_TIMESTAMP) as NumGiorni

IsZero
Funzione che converte 0 in altro numero, utile in viste o stored procedures.

CREATE FUNCTION IsZero (
@Number FLOAT,
@IsZeroNumber FLOAT
)

RETURNS FLOAT
AS
BEGIN
IF (@Number = 0)
BEGIN
SET @Number = @IsZeroNumber
END

RETURN (@Number)
END

es: isZero(<campo>; 1) –> converte o in 1

Annunci