首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据导入期间将平面文件中的dd-mmm-yy值格式化为小时间?

如何在数据导入期间将平面文件中的dd-mmm-yy值格式化为小时间?
EN

Stack Overflow用户
提问于 2011-08-25 20:18:42
回答 2查看 11.4K关注 0票数 5

我有一个平面文件,它通过现有的SSIS包导入到Server中。我需要修改包以适应平面文件中的一个新字段。新字段是一个日期字段,格式为dd-mmm-yy (例如25-8月11日)。平面文件中的日期字段将为空(例如空格/空格)或填充日期。我无法控制平面文件中的日期格式。

我需要将平面文件中的date字段导入到现有的Server表中,并且目标字段数据类型是smalldatetime。

我建议将日期作为字符串导入到load表中,然后在从load表获取数据时转换为smalldatetime。但是,还有另一种方法可以解析日期格式dd,将其直接加载到小日期时间字段中,而不必使用从load表转换为smalldatetime。我想不出如何解析日期格式,尤其是月份。欢迎任何建议。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-25 21:16:46

这里有一个例子,可以让你知道你能做些什么。理想情况下,在SSIS包或任何ETL作业中,您应该考虑到数据可能不是您希望的那样。您需要采取适当的步骤来处理可能不时弹出的不正确或无效的数据。这就是SSIS在数据流任务中提出许多转换任务的原因,您可以利用这些任务来清理数据。

在您的示例中,您可以使用Derived Column转换或Data conversion转换来实现您的需求。

该示例是在SSIS 2008 R2中创建的。它展示了如何读取包含日期的平面文件并将其加载到SQL表中。

我创建了一个简单的SQL表来导入平面文件数据。

在SSIS包中,我有一个到SQL的连接管理器和一个用于平面文件的连接管理器。平面文件连接配置如下所示。

在SSIS包中,我在Control选项卡上放置了一个数据流任务。在内部,数据流任务,我有一个平面文件源,派生列转换和OLE DB目的地。由于平面文件源文件和OLE DB目的地很简单,所以我将把它们放在这里。派生转换使用表达式(DT_DBDATE)SmallDate创建一个新列。请注意,您也可以使用数据转换进行同样的转换。这个新列SmallDateTimeValue应该映射到OLE DB目标中的数据库列。

如果执行此包,它将失败,因为不是文件中的所有值都是有效的。

在这种情况下,它失败的原因是无效数据直接插入到表中。在这种情况下,表将抛出一个异常,使包失败。在本例中,包失败,因为派生列转换的默认设置是如果有任何错误,组件将失败。因此,让我们放置一个虚拟转换来重定向错误行。为此目的,我们将进行多播改革。它什么也做不了。理想情况下,您应该使用OLE目标或您选择的其他目标组件将错误行重定向到另一个表,以便分析导致错误的数据。

从派生转换中拖动红色箭头,并将其连接到多播转换。这将弹出配置错误输出对话框。将列错误和截断下的值从“失败”组件更改为“Redirect row”。这将将任何错误行重定向到多播转换,并且不会进入表。

现在,如果我们执行包,它将成功运行。注意每个方向显示的行数。

这是表中的数据。只有2行有效。您可以查看显示文件中数据的第一个屏幕截图,您可以看到只有2行是有效的。

希望这给您一个在SSIS包中实现您的需求的想法。

票数 7
EN

Stack Overflow用户

发布于 2011-08-25 20:26:05

它应该直接加载到SMALLDATETIME字段中。请记住,日期只是Server中的数字,它们以所需的日期/时间格式呈现给用户。SSIS包应该读25-2011年8月-2011年只是一个日期数据类型,并插入到一个SMALLDATETIME字段没有问题。

那个包是抛错了还是什么?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7196671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档