任何人都可以帮助我,我有以下格式来自flatfile。
2013-12-30 00-20-18,114
我必须将其转换为 datetime 并将其插入数据库。我尝试通过找到它并使用'all'替换all来改变','(milisec部分)。 但是你可以看到它确实无效。
谢谢
答案 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中的表达式可能有点麻烦,所以我将在我的数据流中使用几个派生列,以便我朝着我的最终目标迈出一小步
我在这里有一个基本的查询来注入提供的值
SELECT
'' AS wtf
此派生列将创建两列:DatePart和TimePart。最终结果是我将此列拆分为空格。
DatePart定义为SUBSTRING(wtf,1,10)
,因此这将从字符串中删除前10个字符。
TimePart定义为LTRIM(RIGHT(wtf,LEN(wtf) - 10))
,因此它会占用剩余的字符,而不是空格。
在这一步中,我将把时间部分变成标准格式。我创建了一个新列StandardTime并使用表达式REPLACE(REPLACE(TimePart,",","."),"-",":")
在这里,我将两列重新组合在一起,作为一个名为ConversionReady
的闪亮新列。此表达式为DatePart + " " + StandardTime
在这里,我将ConversionReady
列转换为日期[DT_DATE]数据类型,并将其称为Copy of ConversionReady
因为我很懒。
我创建了一个表格,并将我的wtf映射到SourceValue,将“Copy of ConversionReady”映射到ConvertedValue。
CREATE TABLE dbo.ConversionReady
(
SourceValue varchar(30)
, ConvertedValue datetime
);
No, not really。由于您没有表达式的调试功能,因此它比在单个表达式中尝试完成它更容易调试。
答案 1 :(得分:0)
当我在字符串中混合日期和时间时,我遇到了同样的问题,然后我尝试将其转换为DateTime。这是不可能的。
然后我单独做了。并使用日期添加功能添加了时间。
我回答了我自己的问题,请在链接下方查看。
随意问任何事情。 这是a Link!