使用SSIS包将csv列转换为表列的日期格式?

Posted

技术标签:

【中文标题】使用SSIS包将csv列转换为表列的日期格式?【英文标题】:Date format conversion of cvs column to table column using SSIS Package? 【发布时间】:2014-03-07 22:09:14 【问题描述】:

我正在使用 SSIS 包将数据从 cvs 文件导入到表中。

CVS File

Report_Date
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125
20140125

我想转换为 2014-02-05 日期格式。我如何在 ssis 包中做到这一点。我尝试了转换和转换但我没有成功。有人可以帮我吗?

【问题讨论】:

【参考方案1】:

您可以使用CONVERT( 函数将其更改为日期。例如

SELECT CONVERT(DATE,'20140210',112)

将其更改为日期后,您可以将其输出为您想要的任何格式。

阅读http://msdn.microsoft.com/en-us/library/ms187928.aspx 以获取转换时可用于DATE 的所有样式列表。 112 代表yyyymmdd 格式。

如果日期存储为数字字段,则需要先将其转换为 VARCHAR,然后再将其转换为 DATE,

SELECT CONVERT(DATE,CONVERT(VARCHAR(10),20140204),112)

【讨论】:

我曾在列转换中尝试过上述查询,但出现错误。 这可能来自 SQL Server 将其解释为数字字段,而不是字符串。在这种情况下,只需在尝试将其解析为日期之前将其转换为 Varchar。 谢谢大家,我通过使用下面的表达式 (DT_DBTIMESTAMP)(SUBSTRING([Report_Date],1,4) + "-" + SUBSTRING([Report_Date],5,2) + "- " + SUBSTRING([Report_Date],7,2))【参考方案2】:

我没有用 SSIS 测试过,但是如果你看看这些查询的 TSQL 输出

Select Cast(20140125 AS DATETIME)

Select Cast('20140125' AS DATETIME)

第一个失败,出现“将表达式转换为数据类型日期时间的算术溢出错误”。 但是第二次成功..这意味着如果您先将其转换为字符串,然后再转换为 DateTime,它应该可以工作..如果能够直接从 SSIS 执行,将更新您

【讨论】:

我们可以在列转换中使用选择语句吗?我尝试使用上述查询(SELECT cast('[Report_Date]' as DATETIME))【参考方案3】:
(DT_DBTIMESTAMP)(SUBSTRING([Report_Date],1,4) + "-" + SUBSTRING([Report_Date],5,2) + "-" + SUBSTRING([Report_Date],7,2))

【讨论】:

以上是关于使用SSIS包将csv列转换为表列的日期格式?的主要内容,如果未能解决你的问题,请参考以下文章

ssis 空日期作为空值

如何将所有日期格式转换为日期列的时间戳?

MySQL在不使用表列的情况下选择两列之间的范围日期

SSIS输出日期为DD / MM / YYYY 00:00:00

如何在 SSIS 中将 Y2K 日期转换为 SQL 日期?

将不同格式列的String数据类型的日期转换为PostgreSQL中的日期数据类型