Dans mon package SSIS, je dois convertir les valeurs de DateTime en une valeur INTEGER correspondante. L'exemple suivant a été fourni.
Des idées sur la façon dont je peux les convertir?
DATETIME INT
--------- ----
1/1/2009 39814
2/1/2009 39845
3/1/2009 39873
4/1/2009 39904
5/1/2009 39934
6/1/2009 39965
7/1/2009 39995
8/1/2009 40026
9/1/2009 40057
10/1/2009 40087
11/1/2009 40118
12/1/2009 40148
1/1/2010 40179
2/1/2010 40210
3/1/2010 40238
4/1/2010 40269
5/1/2010 40299
6/1/2010 40330
EDIT: la conversion en float/int ne fonctionne plus dans les versions récentes de SQL Server. Utilisez plutôt ce qui suit:
select datediff(day, '1899-12-30T00:00:00', my_date_field)
from mytable
Notez que la date de chaîne doit être au format format de date sans ambiguïté afin qu'elle ne soit pas affectée par les paramètres régionaux de votre serveur.
Dans les anciennes versions de SQL Server, vous pouvez convertir un DateTime en un entier en convertissant en un flottant, puis en un entier:
select cast(cast(my_date_field as float) as int)
from mytable
(NB: vous ne pouvez pas lancer directement un int, car MSSQL arrondit la valeur si vous avez passé midi!)
S'il y a un décalage dans vos données, vous pouvez évidemment l'ajouter ou le soustraire du résultat
Vous pouvez convertir dans l'autre sens, en jetant directement vers l'arrière:
select cast(my_integer_date as datetime)
from mytable
sélectionnez DATEDIFF (jj, '12/30/1899 ', mydatefield)
Ou, une fois qu'il est déjà dans SSIS, vous pouvez créer une colonne dérivée (dans le cadre d'une tâche de flux de données) avec:
(DT_I8)FLOOR((DT_R8)systemDateTime)
Mais vous devrez tester pour revérifier.