首页 文章

使用SSIS以不同方式填充从CSV到表的日期列

提问于
浏览
3

我有CSV文件

**date column**
06/04/1999
06/04/2000
.
.
.06/04/2017

我只是使用SSIS将此文件从Csv文件加载到数据库表

平面文件源到OLEDB目标

其中date列绝对是DT_STR,SQL表日期列是varchar(50)

但是当我加载时,它的行为会有所不同

**date column**
    06/04/1999
    06/04/2000

和其他一些时间一样

**date column**
    1999-04-06
    2000-04-06

我只是想尝试加载平面文件中的相同内容,但为什么它有时会给出“ - ” . 任何人都可以建议我为什么每次都表现不同 . 它在SSIS中没有任何转换(如派生列)

1 回答

  • 0

    You have to convert these values to DateTime then to String with desired format yyyy-MM-dd using a ScriptComponent Transformation

    • 创建 Flat File connection managerOLEDB Connection Manager (来源和目的地)

    • 添加 DataFlow Task

    • DataFlow Task 添加 Flat File SourceScript ComponentOLEDB Destination

    • 您的DataFlow应该看起来像 Source --> Script --> Destination

    • 在脚本组件中将时间列标记为输入(假设其名称为 inDateColumn )并添加字符串 DT_STR 的输出列(例如: OutDateColumn

    • 在脚本中编写以下代码:(使用Vb.net)

    Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)  
    
        If Not Row.inDateColumn_IsNull AndAlso _
            Not String.IsNullOrEmpty(Row.inDateColumn.Trim) Then
    
            ' You can add more formats inside the following method
    
            Row.OutDateColumn = DateTime.ParseExact(Row.inDateColumn.Trim,New String(){"yyyy-MM-dd","dd/MM/yyyy"},New System.Globalization.CultureInfo("En-GB"), System.Globalization.DateTimeStyles.None).ToString("yyyy-MM-dd")
    
        Else
    
            Row.OutDateColumn_IsNull = True
    
        End If
    
    End Sub
    
    • OutDateColumn 映射到目标列

相关问题