如何从SSIS中的SQL日期时间值中仅提取日期?

时间:2009-12-17 21:28:11

标签: sql-server datetime ssis

如何将日期时间转换为SSIS中的日期?

我正在尝试执行一个聚合查询,该查询将按特定日期分组。为了做到这一点,我试图仅提取时间戳的日期部分(存储为日期时间),以便我可以在下一步执行GROUP BY。

我查看了DATEPART函数,但看起来我必须多次调用它来检索月份,日期和年份,将它们连接在一起然后解析新日期。必须有更好的方法来做到这一点。

5 个答案:

答案 0 :(得分:6)

SSIS 中,您可以使用数据转换转换,输入值为DT_DBTIMESTAMP,输出值为DT_DBDATE

答案 1 :(得分:2)

我的第一个问题是,如果您正在处理同一服务器上的dbs中包含的数据 - 为什么不在SQL Server中执行所有的转换和分组,然后再将数据转移到SSIS?出于性能原因,最好在将数据引入SSIS之前对SQL Server进行任何按摩。但是,如果您正在处理异构数据(oracle,excel,文本文件,来自不同sql server实例的数据),那么您可以使用派生列转换并使用强制转换(DT_DBDATE)转换日期,然后使用聚合组件做你的小组。

答案 2 :(得分:0)

不幸的是,这是最好的方式(在我看来)并且取决于您的目标列(如果这是流程结束的地方),它仍然会有00:00:00:000。但你可能已经认为= P。

答案 3 :(得分:0)

您可以在T-SQL中执行此操作,我假设SSIS允许完全访问SQL Server功能:

 SELECT CAST( FLOOR( CAST(getdate() AS float) ) AS datetime)

基本上,它将日期转换为浮点数(时间是一天的一小部分),使用floor来截断小数(转换为int可能会向上舍入),然后将浮动转换回日期。

高效,有效,并且不需要多次调用DATEPART()

答案 4 :(得分:0)

选择DATEADD(dd,0,DATEDIFF(dd,0,GETDATE()))