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

时间:2017-04-21 15:26:40

标签: sql sql-server ssis etl

我有CSV文件

import numpy as np
import cv2
import matplotlib.pyplot as plt
%matplotlib inline 

def show(title, img, color=True):
    if color:
        plt.imshow(img[:,:,::-1]), plt.title(title), plt.show()
    else:
        plt.imshow(img, cmap='gray'), plt.title(title), plt.show()

img = cv2.imread('color_strokes.jpg')
show('original', img)

mask=cv2.inRange(img,(0,0,0),(150,150,150))
show('mask', mask, False)

res=255-cv2.cvtColor(mask,cv2.COLOR_GRAY2BGR)
show('result', res, False)

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

  
    

OLEDB目标的平面文件源

  

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

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

一样填充
**date column**
06/04/1999
06/04/2000
.
.
.06/04/2017

以及其他一些时间

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

我只想尝试加载平面文件中的相同内容,但为什么要提供" - "有时候 任何人都可以建议我为什么每次都表现不同。 它在SSIS中没有任何转换(如派生列)

1 个答案:

答案 0 :(得分:0)

您必须使用yyyy-MM-dd

将这些值转换为DateTime,然后转换为所需格式ScriptComponent Transformation的字符串
  1. 创建Flat File connection managerOLEDB Connection Manager(来源和目的地)
  2. 添加DataFlow Task
  3. DataFlow Task添加Flat File SourceScript ComponentOLEDB Destination
  4. 您的DataFlow应该看起来像Source --> Script --> Destination
  5. 在“脚本”组件中将“时间”列标记为输入(假设其名称为inDateColumn)并添加字符串OutDateColumn <的输出列(例如:DT_STR) / LI>
  6. 在脚本中编写以下代码:(使用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 
    
  7. OutDateColumn映射到目标列