如何将文件中的 mm/dd/yyyy 值导入到格式为 yyyy-mm-dd 的数据库字段中?

use*_*424 3 ssis

我有一个带有日期列的 CSV 文件,格式为mm/dd/yyyy (4/20/2012),我需要将此列加载到在yyyy-mm-dd (2012-04- 20)。

为此,我使用了派生列转换,并编写了类似的表达式

(DT_WSTR)(SUBSTRING(ReceivedDateTime,1,4) + "-" + 
SUBSTRING(ReceivedDateTime,5,2) + "-" + SUBSTRING(ReceivedDateTime,7,2)) 
Run Code Online (Sandbox Code Playgroud)

在运行我的包时,它抛出错误Unable to perform type cast

小智 5

如果来自 CSV 文件的传入值始终采用04/20/2012( MM/DD/YYYY)格式,则您无需执行任何类型转换。您只需配置平面文件连接管理器以将文件中的值视为date数据类型。

假设您的 CSV 文件如下所示,其中一列包含 .

CSV 文件

在 SSIS 包中,创建一个平面文件连接管理器来读取 CSV 文件。我将 CSV 存储在路径中C:\temp\Source.csv

平面文件源通用部分

在该Advanced部分中,您会注意到平面文件连接管理器将第一列命名为 asColumn1并且 DataType 属性设置为string [DT_STR]。但是,文件中的值实际上是日期。您可以手动配置数据类型或单击Suggest Types...按钮。

高级建议类型

Suggest Column Types 上,保留默认值并单击OK。这将读取文件的前 100 行,并根据文件中可用的数据确定列类型。

建议列类型

一旦你点击OK建议列类型对话框中,你会发现,对于平面文件连接管理器中的数据类型Column 0已更改为date [DT_Date]。单击确定以配置平面文件连接管理器。您还可以根据您的要求重命名该列(例如InvoiceDateOrderDate等)

数据类型已更改

现在您已经配置了平面文件连接管理器,您可以在数据流任务中的平面文件源中使用它来读取数据并填充您的数据库。因此,无需使用派生列转换来操作值。

但是,如果传入的文件值是类似 的字符串120420 (YYMMDD),则这些值不能配置为日期数据类型。在这些情况下,您需要按照本答案中的建议使用派生列转换。

希望有帮助。