将平面文件列转换为Datetime

时间:2014-02-17 16:00:41

标签: ssis

任何人都可以帮助我,我有以下格式来自flatfile。

2013-12-30 00-20-18,114

我必须将其转换为 datetime 并将其插入数据库。我尝试通过找到它并使用'all'替换all来改变','(milisec部分)。 但是你可以看到它确实无效。

谢谢

2 个答案:

答案 0 :(得分:1)

您从一个2013-12-30 00-20-18,114字符串开始,您需要将其转换为SQL Server可以处理的格式。明确的格式是2013-12-30T00:20:18.114,但是表达式语言不会像中间的T那样,所以我们必须满足于2013-12-30 00:20:18.114作为我们的最终状态。

然后你的问题变成了,如何将提供的字符串操作为该格式。你可以使用一个脚本任务,但没有必要为这样的事情拿出大枪。因为SSIS中的表达式可能有点麻烦,所以我将在我的数据流中使用几个派生列,以便我朝着我的最终目标迈出一小步

enter image description here

OLE_SRC日期字符串

我在这里有一个基本的查询来注入提供的值

SELECT
    '' AS wtf

DER拆分为零件

此派生列将创建两列:DatePart和TimePart。最终结果是我将此列拆分为空格。

DatePart定义为SUBSTRING(wtf,1,10),因此这将从字符串中删除前10个字符。 TimePart定义为LTRIM(RIGHT(wtf,LEN(wtf) - 10)),因此它会占用剩余的字符,而不是空格。

DER Standardize

在这一步中,我将把时间部分变成标准格式。我创建了一个新列StandardTime并使用表达式REPLACE(REPLACE(TimePart,",","."),"-",":")

DER Concat

在这里,我将两列重新组合在一起,作为一个名为ConversionReady的闪亮新列。此表达式为DatePart + " " + StandardTime

数据转换

在这里,我将ConversionReady列转换为日期[DT_DATE]数据类型,并将其称为Copy of ConversionReady因为我很懒。

OLE DB目的地

我创建了一个表格,并将我的wtf映射到SourceValue,将“Copy of ConversionReady”映射到ConvertedValue。

CREATE TABLE dbo.ConversionReady
(
    SourceValue varchar(30)
,   ConvertedValue datetime
);

所有派生列的内容是什么?那件事慢下来吗?

No, not really。由于您没有表达式的调试功能,因此它比在单个表达式中尝试完成它更容易调试。

答案 1 :(得分:0)

当我在字符串中混合日期和时间时,我遇到了同样的问题,然后我尝试将其转换为DateTime。这是不可能的。

然后我单独做了。并使用日期添加功能添加了时间。

我回答了我自己的问题,请在链接下方查看。

随意问任何事情。 这是a Link