SSIS将时间戳列导入日期和时间列

时间:2017-03-07 19:47:12

标签: sql-server datetime ssis type-conversion derived-column

我在varchar 28/12/2016 16:39:01

中有这个Timestr

如何将列导出到SSIS中的日期和时间

期望的结果

日期格式中的日期2016-12-28

时间格式的时间16:39:01

这是我到目前为止在SQL中所拥有的

SELECT FORMAT(CAST((SUBSTRING(TimeStr,12,8)) AS DATETIME),'hh:mm:ss tt') AS Time

代码enter image description here

结果enter image description here

2 个答案:

答案 0 :(得分:3)

使用SSIS表达式,您可以尝试:

<强> DATE

(DT_DBDATE)(SUBSTRING(Timestr,7,4) + "-" + 
SUBSTRING(Timestr,4,2) + "-" + SUBSTRING(Timestr,1,2))

<强> TIME

(DT_DBTIME)(SUBSTRING(Timestr,12,8))

您的派生列设置应如下所示:

enter image description here

更新:避免DT_DBTIME

中的毫秒
(DT_DBTIME2,0)(SUBSTRING(Timestr,12,8))

希望它有所帮助。

答案 1 :(得分:1)

要将varchar转换为日期时间,我建议尝试使用Try_Convert()(如果不是2012+),如果不是这样,只要你的数据合理,Convert()就可以完成。

try_convert(datetime,Timestr,103)  --  returns 2016-12-28 16:39:01.000

使用Format()

Declare @Timestr varchar(25) = '28/12/2016 16:39:01'
Select DateTime12 = format(try_convert(datetime,@Timestr,103),'yyyy-MM-dd hh:mm:ss tt')
      ,DateOnly   = format(try_convert(datetime,@Timestr,103),'yyyy-MM-dd')
      ,Time12     = format(try_convert(datetime,@Timestr,103),'hh:mm:ss tt')
      ,Time24     = format(try_convert(datetime,@Timestr,103),'HH:mm:ss')

返回

DateTime12                DateOnly      Time12         Time24
2016-12-28 04:39:01 PM    2016-12-28    04:39:01 PM    16:39:01