Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SSIS将字符串转换为日期时间dd/mm/yyy hh:mm:ss_Sql Server 2008_Ssis - Fatal编程技术网

Sql server 2008 SSIS将字符串转换为日期时间dd/mm/yyy hh:mm:ss

Sql server 2008 SSIS将字符串转换为日期时间dd/mm/yyy hh:mm:ss,sql-server-2008,ssis,Sql Server 2008,Ssis,我想使用SSIS中的派生列转换一个字符串,如“215201101946” 输出应类似于“21/05/2012 10:19:46”,以适合[DateTime]SQL Server 2008字段 谢谢 你应该考虑丰富你的日期时间数据。你需要有一个合适的格式,比如 YYYYMMDD HH:MM::SS 或者类似的东西。你不可能有 YYYYMDD HH:MM:SS 如果您有正确格式的数据DDMMYYY HH:MM:SS,则可以在派生列中使用以下表达式 LEN(column) == 0 ? NULL(DT

我想使用SSIS中的派生列转换一个字符串,如“215201101946”

输出应类似于“21/05/2012 10:19:46”,以适合[DateTime]SQL Server 2008字段


谢谢

你应该考虑丰富你的日期时间数据。你需要有一个合适的格式,比如

YYYYMMDD HH:MM::SS

或者类似的东西。你不可能有

YYYYMDD HH:MM:SS

如果您有正确格式的数据DDMMYYY HH:MM:SS,则可以在派生列中使用以下表达式

LEN(column) == 0 ? NULL(DT_DBTIMESTAMP) :
(DT_DBTIMESTAMP)(substring(column,1,2) + "-" + substring(column,3,2) + "-" +
substring(column,5,4) + " " + substring(column,10,2) + ":" substring(column,12,2)+ ":"
+ substring(column,14,2))

DT_DBTIMESTAMP数据类型必须采用以下格式才能正确转换:

YYYY-MM-DD HH:MM:SS

以日期和时间“2012-07-30 02:03:10”为例,派生列将显示为:

(DT_DBTIMESTAMP)(SUBSTRING([column],1,4) + "-" + SUBSTRING([column],5,2) + "-" + SUBSTRING([column],7,2) + " " + SUBSTRING([column],9,2) + ":" + SUBSTRING([column],11,2) + ":" + SUBSTRING([column],13,2))
结果输出列将显示为:

(DT_DBTIMESTAMP)(SUBSTRING([column],1,4) + "-" + SUBSTRING([column],5,2) + "-" + SUBSTRING([column],7,2) + " " + SUBSTRING([column],9,2) + ":" + SUBSTRING([column],11,2) + ":" + SUBSTRING([column],13,2))
2012-07-30 02:03:10.000

回想一下,给定日期内的任何缺失值都可以与列中的日期值连接起来。例如,使用字符串值“215201101946”,您的派生列表达式将写为:

(DT_DBTIMESTAMP)(SUBSTRING([column],4,4) + "- 0" + SUBSTRING([column],3,1) + "-" + SUBSTRING([column],1,2) + " " + SUBSTRING([column],9,2) + ":" + SUBSTRING([column],11,2) + ":" + SUBSTRING([column],13,2) + ".000")

进一步,由于字符串格式中的日期通常不干净,您可以考虑编写一个条件语句,该语句在连接和转换值之前检查值的长度。例如,如果2012/09/30 11:59pm和2012/10/01 11:59pm在不存在前导零的列中表示为字符串,则字符串可能显示为:

(DT_DBTIMESTAMP)(SUBSTRING([column],1,4) + "-" + SUBSTRING([column],5,2) + "-" + SUBSTRING([column],7,2) + " " + SUBSTRING([column],9,2) + ":" + SUBSTRING([column],11,2) + ":" + SUBSTRING([column],13,2))
“2012930115959” “20121001 115959”

为了说明月份的前导零,可以合并if-then-else表达式,以便:

LEN(column) = 14 ? (DT_DBTIMESTAMP)(SUBSTRING([column],1,4) + "- 0" + SUBSTRING([column],5,1) + "-" + SUBSTRING([column],6,2) + " " + SUBSTRING([column],9,2) + ":" + SUBSTRING([column],11,2) + ":" + SUBSTRING([column],13,2)) : (DT_DBTIMESTAMP)(SUBSTRING([column],1,4) + "-" + SUBSTRING([column],5,2) + "-" + SUBSTRING([column],7,2) + " " + SUBSTRING([column],10,2) + ":" + SUBSTRING([column],12,2) + ":" + SUBSTRING([column],14,2))
请注意,上述表达式不考虑长度小于14个字符或大于15个字符的值。在这种情况下,可以展开上面的if-then-else表达式,以嵌套不同长度的其他表达式