从DateTime转换为INT

时间:2011-03-31 20:30:27

标签: sql-server ssis sql-server-2008-r2

在我的SSIS包中,我必须将DateTime中的值转换为相应的INTEGER值。提供了以下示例。

关于如何转换这些内容的任何想法?

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 个答案:

答案 0 :(得分:16)

编辑:转换为float / int不再适用于最新版本的SQL Server。请改用以下内容:

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

请注意,字符串日期应位于unambiguous date format内,以免受服务器区域设置的影响。


在旧版本的SQL Server中,您可以通过强制转换为float,然后转换为int来将DateTime转换为Integer:

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

(注意:你不能直接转换为int,因为如果你过了中午,MSSQL会将值向上舍入!)

如果数据中存在偏移量,您显然可以从结果中添加或减去此值

您可以通过直接投射向另一个方向转换:

select cast(my_integer_date as datetime)
from mytable

答案 1 :(得分:10)

  

选择DATEDIFF(dd,'12 / 30/1899',mydatefield)

答案 2 :(得分:0)

或者,一旦它已经在SSIS中,您可以使用以下命令创建派生列(作为某些数据流任务的一部分):

(DT_I8)FLOOR((DT_R8)systemDateTime)

但是你必须进行双重检查。