将字符串转换为日期时间(使用SSIS)

Aks*_*hay 6 ssis

我想将值"5/27/2013 16:42:37.490000"(从平面文件(DT_STR)读取)插入SQL Server表的列(日期时间).如果我尝试在派生列中使用(DT_DBDATE)或DT_DBTIMESTAMP进行强制转换,则会出错.

[Derived Column [130]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR.  The "component "Derived Column" (130)" failed because error code 0xC0049064 occurred, and the error row disposition on "output column "Derived Column 1" (155)" specifies failure on error. An error occurred on the specified object of the specified component.  There may be error messages posted before this with more information about the failure.
Run Code Online (Sandbox Code Playgroud)

我该怎么办呢?

谢谢

pra*_*een 10

值是一个datetime2类型.AFAIK SSIS不支持datetime2.您需要将其作为字符串存储在数据库中,然后通过将列转换为datetime2来更新列.

这是Microsoft Connect Issue

更新:使用DT_DBTIMESTAMP2您可以将字符串转换为正确的日期时间格式

以下代码在派生列中完美运行

(DT_DBTIMESTAMP2,7)"2013-5-27 16:42:37.490000"
Run Code Online (Sandbox Code Playgroud)

7是这里的进动.如果datetime的格式不同,上面的代码将不起作用MM/DD/YYYY HH:mm:ss.ffffff.例如 .

但是,您可以使用Script component并传递不同日期时间格式的数组来Datetime.ParseExact运行

步骤1:拖动脚本组件并创建一个新的DT_DBTIMESTAMP数据类型输出列并将其命名为NewDate.

Step2:编写下面的C#代码

public override void Input0_ProcessInputRow(Input0Buffer Row)
 {
  string[] format = new string[] { @"M/dd/yyyy HH:mm:ss.ffffff",
                                         @"MM/dd/yyyy HH:mm:ss",
                                         @"M/d/yyyy HH:mm:ss" ,
                                         @"M/dd/yyyy HH:mm:ss.ffffff",
                                         @"MM/dd/yyyy HH:mm:ss.ffffff",
                                          @"M/d/yyyy HH:mm:ss.ffffff"};
  DateTime dt = DateTime.ParseExact(Row.Date,
                format ,
                CultureInfo.InvariantCulture,
                DateTimeStyles.None);

  Row.newDate = dt;
 }
Run Code Online (Sandbox Code Playgroud)