首页 文章

数据类型转换不会粘在SSIS中

提问于
浏览
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",这只会为这个百慕大三角形的雀跃增添更多神秘色彩 .

如果有任何提示,我会非常感激 .

2 回答

  • 0

    这是日期格式问题 .

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

    enter image description here

    以上 - 与美国不同 - 英国人将所有日期视为DD / MM / YYYY . 我们显示日期的方式不是它们存储在磁盘上的方式 . 当您在Excel中打开时,它会将此转换作为帮助 . 直到您认为日期存储 - 作为文本 - 根据您的区域偏好 .

    为了使日期始终以相同的方式显示 . 我们需要将它们保存为日期,而不是文本字符串 . 为此,我们必须从日期列 DT_DATEDT_DBDATE 中获取数据并将其输入字符串列: DT_STRDT_WSTR . 然后,将此新字符串列映射到csv文件中 . 两种方法"date-to-string"转换...

    首先,让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文件,而不是日期列 . 希望这可以帮助 .

  • 0

    已经有一段时间了,但我今天才遇到这个问题,因为我遇到了同样的问题,并希望能够帮助别人解决问题 . 对我有用的是 adding 衍生列转换中的新字段,而不是尝试更改现有字段 .

    Edit

    我不能评论Troy Witthoeft的答案,但是想要注意,如果你有一个Date类型输入,你将无法进行SUBSTRING . 相反,你可以使用这样的东西:

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

相关问题