SSIS 将时间戳列派生为日期和时间列
SSIS Derive timestamp column into date and time columns
我在 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
代码
结果
要将您的 varchar 转换为日期时间,如果 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')
Returns
DateTime12 DateOnly Time12 Time24
2016-12-28 04:39:01 PM 2016-12-28 04:39:01 PM 16:39:01
您可以尝试使用 SSIS 表达式:
日期
(DT_DBDATE)(SUBSTRING(Timestr,7,4) + "-" +
SUBSTRING(Timestr,4,2) + "-" + SUBSTRING(Timestr,1,2))
时间
(DT_DBTIME)(SUBSTRING(Timestr,12,8))
您的派生列设置应如下所示:
更新:避免在DT_DBTIME
中使用毫秒
(DT_DBTIME2,0)(SUBSTRING(Timestr,12,8))
希望对您有所帮助。
我在 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
代码
结果
要将您的 varchar 转换为日期时间,如果 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')
Returns
DateTime12 DateOnly Time12 Time24
2016-12-28 04:39:01 PM 2016-12-28 04:39:01 PM 16:39:01
您可以尝试使用 SSIS 表达式:
日期
(DT_DBDATE)(SUBSTRING(Timestr,7,4) + "-" +
SUBSTRING(Timestr,4,2) + "-" + SUBSTRING(Timestr,1,2))
时间
(DT_DBTIME)(SUBSTRING(Timestr,12,8))
您的派生列设置应如下所示:
更新:避免在DT_DBTIME
(DT_DBTIME2,0)(SUBSTRING(Timestr,12,8))
希望对您有所帮助。