首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数据类型转换不会在SSIS中持续存在

数据类型转换不会在SSIS中持续存在
EN

Stack Overflow用户
提问于 2015-08-27 22:22:42
回答 2查看 870关注 0票数 0

我正在尝试使用SSIS自动化一个过程,它将数据导出到一个平面文件(.csv)中,然后将其保存到一个目录中,然后由一些会计软件对其进行扫描和导入。软件(不幸的是)只能识别MM/DD/YYYY格式的日期。我尝试了各种方法来将从SQL中提取的数据转换为MM/DD/YYYY,但不知何故,在平面文件连接中,数据总是被识别为DT_Date或DT_dbDate数据类型,并保存为YYYY-MM-DD。

我尝试了数据转换、派生列和将平面文件列的属性更改为字符串的各种组合,希望至少可以使用子字符串操作将其正确格式化,但它总是保存为YYYY-MM-DD。这真的令人费解。OLE DB源代码中的预览将日期显示为"MM/DD/YYYY“,但不知何故,当它命中平面文件时,它总是更改为"YYYY-MM-DD”。

我试着寻找解决方案(例如,这里:Stubborn column data type in SSIS flat flat file connection manager won't change. :(),但没有成功。令人惊讶的是,如果我只是在Excel中打开文件并保存它,它会在文本编辑器中显示日期为"MM/DD/YYYY",只会给这个百慕大三角风格的游戏增加更多的神秘色彩。

如果有任何建议,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2016-12-05 15:49:24

已经有一段时间了,但我今天才遇到这个问题,因为我也有同样的问题,希望能省去别人解决这个问题的麻烦。对我来说起作用的是在派生的列转换中添加了一个新字段,而不是试图更改现有字段。

编辑

相反,您可以使用类似以下内容:

(DT_WSTR,255)(MONTH([Visit Date])) + "/" + (DT_WSTR,255)(DAY([Visit Date])) + "/" + (DT_WSTR,255)(YEAR([Visit Date]))

票数 0
EN

Stack Overflow用户

发布于 2016-12-07 03:36:43

这是一个日期格式问题。

在SQL和SSIS中,日期有一个literal string format,即YYYY-MM-DD。忽略它们在数据预览器和/或Excel中显示给您的方式。系统会根据您的Windows regional prefrences向您显示日期。

上图--与美国不同--英国人看到的所有日期都是DD/MM/YYYY。显示日期的方式与存储在磁盘上的方式不同。当您在Excel中打开时,它会帮您完成此转换。只有在保存之后,才会根据您的地区偏好将日期存储为文本。

为了让日期始终以相同的方式显示。我们不需要将它们保存为日期,而是文本字符串。为此,我们必须从日期列DT_DATEDT_DBDATE中获取数据,并将其放入字符串列:DT_STRDT_WSTR。然后,将这个新的字符串列映射到csv文件中。有两种方法可以完成这个“日期到字符串”的转换。

首先,让SQL来做这件事。更新您的OLE DB源查询并再添加一列...

代码语言:javascript
运行
AI代码解释
复制
SELECT 
    *, 
    CONVERT(VARCHAR(10), MyDateColumn, 101) AS MyFormattedDateColumn
FROM MyTable

另一种方法是让SSIS来做。使用表达式添加派生列组件

代码语言:javascript
运行
AI代码解释
复制
 SUBSTRING([MyDateColumn],6,2) + "/" + SUBSTRING([MyDateColumn],8,2) + "/" + SUBSTRING([MyDateColumn],1,4)

将字符串列映射到csv文件,而不是日期列。希望这能有所帮助。

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

https://stackoverflow.com/questions/32260395

复制
相关文章

相似问题

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