Преобразование из DateTime в INT

в моем пакете SSIS я должен преобразовать значения из DateTime в соответствующее целое значение. Был предоставлен следующий образец.

любые идеи о том, как я могу преобразовать их?

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

3 ответов


EDIT: приведение к float / int больше не работает в последних версиях SQL Server. Вместо этого используйте следующее:

select datediff(day, '1899-12-30T00:00:00', my_date_field)
from mytable

обратите внимание, что строка date должна быть в однозначный формат даты чтобы на него не влияли региональные настройки вашего сервера.


в более старых версиях SQL Server вы можете преобразовать из DateTime в целое число путем приведения к float, а затем к int:

select cast(cast(my_date_field as float) as int)
from mytable

(NB: вы не можете бросить прямо в int, так как MSSQL округляет значение, если вы прошли полдень!)

Если в ваших данных есть смещение, вы можете, очевидно, добавить или вычесть это из результата

вы можете конвертировать в другом направлении, бросая прямо назад:

select cast(my_integer_date as datetime)
from mytable

выберите DATEDIFF (dd, '12/30/1899', mydatefield)


или, как только он уже находится в SSIS, вы можете создать производный столбец (как часть некоторой задачи потока данных) с:

(DT_I8)FLOOR((DT_R8)systemDateTime)

но вам придется проверить, чтобы удвоить проверку.