web-dev-qa-db-fra.com

Convertir de DateTime en INT

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
9
Raj More

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
16
Steve Mayne

sélectionnez DATEDIFF (jj, '12/30/1899 ', mydatefield)

10
Joel Coehoorn

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.

0
Michael J Swart