SSIS将时间戳列拆分成日期和时间列

4

我有一个varchar类型的Timestr 28/12/2016 16:39:01

如何在SSIS中将该列拆分为日期和时间

期望结果

日期以日期格式显示:2016-12-28

时间以时间格式显示:16:39:01

目前在SQL中已有以下代码:

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

代码 这里输入图片描述

结果 这里输入图片描述

2个回答

4
使用SSIS表达式,您可以尝试:
DATE
(DT_DBDATE)(SUBSTRING(Timestr,7,4) + "-" + 
SUBSTRING(Timestr,4,2) + "-" + SUBSTRING(Timestr,1,2))

时间

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

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

enter image description here

更新:避免在DT_DBTIME中使用毫秒。
(DT_DBTIME2,0)(SUBSTRING(Timestr,12,8))

希望这有所帮助。

错过了 SSIS 的关键项 +1 - John Cappelletti
这是我从上面的代码中得到的结果...非常接近我想要的,但如何去掉时间列中那些额外的000000呢?日期 - 2016-11-30 时间 - 07:29:21.0000000 - Jason312
@alejandrozuleta 仍然无法摆脱毫秒。代码的结果是 Time - 07:29:21.0000000。 - Jason312
@Jason312,您正在插入值的列的数据类型是什么?您如何在源中可视化数据?此外,请记住格式化应在演示文稿中处理,而不是在后端处理。 - alejandro zuleta
我已经尝试了datetime和time,但仍无法去除毫秒。 - Jason312

1

要将您的varchar转换为datetime,如果使用2012+版本,则建议使用Try_Convert(),否则只需使用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

抱歉,我是新手,请问如何将上述代码转换为派生列的SSIS格式? - Jason312

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接