Преобразование из 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
или, как только он уже находится в SSIS, вы можете создать производный столбец (как часть некоторой задачи потока данных) с:
(DT_I8)FLOOR((DT_R8)systemDateTime)
но вам придется проверить, чтобы удвоить проверку.