我正在尝试使用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",只会给这个百慕大三角风格的游戏增加更多的神秘色彩。
如果有任何建议,我将不胜感激。
发布于 2016-12-05 15:49:24
已经有一段时间了,但我今天才遇到这个问题,因为我也有同样的问题,希望能省去别人解决这个问题的麻烦。对我来说起作用的是在派生的列转换中添加了一个新字段,而不是试图更改现有字段。
编辑
相反,您可以使用类似以下内容:
(DT_WSTR,255)(MONTH([Visit Date])) + "/" + (DT_WSTR,255)(DAY([Visit Date])) + "/" + (DT_WSTR,255)(YEAR([Visit Date]))
发布于 2016-12-07 03:36:43
这是一个日期格式问题。
在SQL和SSIS中,日期有一个literal string format,即YYYY-MM-DD。忽略它们在数据预览器和/或Excel中显示给您的方式。系统会根据您的Windows regional prefrences向您显示日期。
上图--与美国不同--英国人看到的所有日期都是DD/MM/YYYY。显示日期的方式与存储在磁盘上的方式不同。当您在Excel中打开时,它会帮您完成此转换。只有在保存之后,才会根据您的地区偏好将日期存储为文本。
为了让日期始终以相同的方式显示。我们不需要将它们保存为日期,而是文本字符串。为此,我们必须从日期列DT_DATE
或DT_DBDATE
中获取数据,并将其放入字符串列:DT_STR
或DT_WSTR
。然后,将这个新的字符串列映射到csv文件中。有两种方法可以完成这个“日期到字符串”的转换。
首先,让SQL来做这件事。更新您的OLE DB源查询并再添加一列...
SELECT
*,
CONVERT(VARCHAR(10), MyDateColumn, 101) AS MyFormattedDateColumn
FROM MyTable
另一种方法是让SSIS来做。使用表达式添加派生列组件
SUBSTRING([MyDateColumn],6,2) + "/" + SUBSTRING([MyDateColumn],8,2) + "/" + SUBSTRING([MyDateColumn],1,4)
将字符串列映射到csv文件,而不是日期列。希望这能有所帮助。
https://stackoverflow.com/questions/32260395
复制