只需掀开fromdt = Row.SampleDate
到
Row.SampleDate = fromdt
你的脚本应该可以工作,但如果你想要的话,请看下面的内容。
HOW TO DO IT没有剧本--see下面的脚本方法
你可以,如果你使用Derived Column
转型,而不是让这个简单了很多自己!数据转换转换不起作用,因为它不允许您操纵列的值,而只能处理数据类型。但是在派生列中,您可以剪切字符串并将结果作为日期进行投射。
因此,在您的数据流中源到派生列到目的地。
在派生列的添加新的列,并使用下列作为表达式
然后使用此作为Expression
(用含有ddMMyyyy
格式的日期name of your column
替换DateString
):
(DT_DATE)(SUBSTRING(DateString,3,2) + "/" + (LEFT(DateString,2) + "/" + RIGHT(DateString,4)))
(dt_date)
可以切换为另一种日期格式,如果您愿意并且该类型转换将自动执行a在Derived Column
上设置Data Type
。然后在您的destination
将new derived column
映射到destination column
而不是您的source
的原始列。
就是这样做的,没有剧本。
HOW TO DO IT通过脚本
为了解决途径,如果你想留一个脚本,也许注入一些额外的逻辑,而不是简单的转换就可以通过在一个transformation
script component
做你data flow task
。它将取代上述的derived column
转换,但基本上只能通过脚本完成相同的操作。我在这里采取措施,我猜你已经知道一些在别人绊倒在帖子上的情况。
- 添加脚本组件一旦你选择了“转型”,并与您连接源
- 打开脚本组件,然后转到“
Inputs and Outputs
”部分,并添加一个输出持有新列,并设置数据类型。一个新列是必要的,因为你正在改变数据类型
- 去 “
Input Columns
” 部分,选择SampleDate
列
- 回去“
Script
”部分并选择Vi作为脚本语言的基础。
- 点击Edit Script开始编码。
- 向下滚动直到找到sub
Input0_ProcessInputRow(ByVal Row...
这是您将放置代码的位置。
此代码:
Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
If Not Row.SampleDate_IsNull Then
Row.DerivedDate = DateTime.ParseExact(Row.SampleDate, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture)
End If
End Sub
由于@Shiva的意见建议,你可以扩大这一点,并使用TryParseExact或在try catch块包起来,这样,如果解析日期失败,只会清晰/从记录中删除值并导入将继续。由于处理无效数据更多地是业务需求的问题,所以我会将其留给您。
你应该真的检查答案还没有提供之前提出一个新的问题:http://stackoverflow.com/questions/21833719/convert-flatfile-column-to-datetime – BIDeveloper
亲爱的BIDeveloper,如果你认为答案已经在那里,让我知道。相信我我已经尝试了一切,但我的VB代码不是将DDMMYYYY转换为YYYY-MM-DD HH:MM:SS格式。 –
虽然我不怀疑如何将字符串(从平面/文本文件)转换为(子)类型Date的变量的问题之前已被问到,答案“使用从您的SQL Server转换”是错误的。 –