如何将日期从文件加载到SQL Server表中,并处理SSIS中的其他字符

问题描述 投票:0回答:1

我是SSIS的新手,我正在尝试使用SSIS将CSV文件导入SQL Server表。 CSV文件有一个日期列,我已将数据类型设置为DT_DATEMM/dd/yyyy日期的格式。但是,对于小于10的月份和日期,它没有前导零,即March 7, 2012位于文件3/7/2012中。没有日期值的行具有 - 字符。有人可以帮助我,如何将这些数据加载到SQL服务器。我假设3/7/2012的日期将被加载到表中而没有问题。但是,我想处理破折号并将它们作为NULL加载到SQL服务器中。我可以使用派生列吗?如果值为 - ,则将其设置为NULL,其他按原样填充日期值。它是否正确?

我尝试了以下代码,我收到一些错误消息。

ISNULL([Last Contacted Date]) || (DT_WSTR,1)[Last Contacted Date] == "-" || (DT_WSTR,0)[Last Contacted Date] == "" ? NULL(DT_DATE) : [Last Contacted Date]

对于Derived Last Contacted Date列,我将Error和Truncation属性设置为“Ignore failure”,并且作业运行正常。

但是,当我运行SSIS作业时,数据将加载到SQL Server表中,但SQL Server表中所有记录的上次联系日期为NULL。该文件有几行,其中值是有效日期。

有人可以帮忙吗?

sql-server date ssis flat-file ssis-2008
1个回答
0
投票

在“平面文件连接管理器”中,将列类型设置为具有适当长度的DT_WSTR,然后使用带有以下表达式的派生列:

REPLACENULL([Last Contacted Date],"") == "" ? NULL(DT_DATE) :
(DT_DATE)(RIGHT("0" +  [Last Contacted Date], FINDSTRING( [Last Contacted Date], "/", 1 ) - 1) 
+ "/" + 
RIGHT("0" + SUBSTRING([Last Contacted Date], FINDSTRING( [Last Contacted Date], "/", 1 ) +1, FINDSTRING( [Last Contacted Date], "/", 2 ) - FINDSTRING( [Last Contacted Date], "/", 1 ) - 1), 2)
+ "/" + 
RIGHT([Last Contacted Date],4))
© www.soinside.com 2019 - 2024. All rights reserved.