SSIS divisione condizionata

venerdì 02 marzo 2007 - 13.01

clood Profilo | Newbie

Buongiorno
ho la necessità di dividere una tabella con lo strumento "divisione condizionata" di Integration Server, e da una parte, far fluire tutti i dati con data del giorno prima. Quale condizione usare? Come si scrive data = getdate -1 ?

Vi ringrazio anticipatamente
Saluti

Claudio

lbenaglia Profilo | Guru

>ho la necessità di dividere una tabella, con lo strumento "divisione
>condizionata" di Integration Server, e da una parte, far fluire
>tutti i dati con data del giorno prima. Quale condizione usare?
>Come si scrive data = getdate -1 ?

Ciao Claudio,

In SQL Server i data type datetime e smalldatetime contengono sia la data che l'informazione oraria, pertanto se sottrai 1 a getdate otterrai la data di ieri a quella determinata ora.
Se la tabella contiene sia l'informazione data che quella oraria, corri il rischio di non considerare le righe di ieri successive all'ora di esecuzione del package.
Per ovviare al problema puoi considerare tutte le righe < delle ore 0:00 di oggi.
OK, ma come eliminare la parte oraria?
Puoi utilizzare questo semplice trucchetto:

SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) AS OnlyDate; /* Output: OnlyDate ----------------------- 2007-03-02 00:00:00.000 (1 row(s) affected) */

La DATEDIFF(day, 0, GETDATE()) restituisce il numero di giorni dalla data base (1 gennaio 1900), mentre la DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) aggiunge i giorni appena calcolati alla data base eliminando in questo modo la parte oraria.

>Vi ringrazio anticipatamente
Prego.

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

clood Profilo | Newbie

Informazione preziosa recepita GRAZIE
ma in oracle si usa: to_char (data, 'AAAAMMDD') = '20070101' ,
Con SQL server esiste un comando del genere?
Saluti

lbenaglia Profilo | Guru

>ma in oracle si usa: to_char (data, 'AAAAMMDD') = '20070101'
>,
>Con SQL server esiste un comando del genere?

Puoi castare una data in stringa specificando il formato che preferisci utilizzando la funzione CONVERT:

"CAST and CONVERT (Transact-SQL)"
http://msdn2.microsoft.com/en-us/library/ms187928.aspx

Ad ogni modo se devi semplicemente rimuovere l'informazione oraria ha poco senso convertire la data in stringa, dato che SQL Server dovrà eseguire un cast implicito a datetime per valutare la condizione di WHERE.
Comunque puoi ottenere l'equivalente del to_char (data, 'AAAAMMDD') = '20070101' in questo modo:

SELECT CONVERT(char(8), GETDATE(), 112) AS DateToString; /* Output: DateToString ------------ 20070302 (1 row(s) affected) */

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5