Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 数据类型转换不会在SSI中保持不变_Date_Datetime_Ssis_Type Conversion_Flat File - Fatal编程技术网

Date 数据类型转换不会在SSI中保持不变

Date 数据类型转换不会在SSI中保持不变,date,datetime,ssis,type-conversion,flat-file,Date,Datetime,Ssis,Type Conversion,Flat File,我正在尝试使用SSIS自动化一个过程,该SSIS将数据导出到一个平面文件.csv中,然后保存到一个目录中,在该目录中,数据将被一些会计软件扫描和导入。不幸的是,软件只能识别MM/DD/YYYY格式的日期。我尝试了各种方法将从SQL提取的数据转换为MM/DD/YYYY,但不知何故,在平面文件连接中,数据总是被识别为DT_日期或DT_dbDate数据类型,并保存为YYYY-MM-DD 我尝试了数据转换、派生列和将平面文件列的属性更改为字符串的各种组合,希望至少可以使用子字符串操作来正确格式化,但它总

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

我尝试了数据转换、派生列和将平面文件列的属性更改为字符串的各种组合,希望至少可以使用子字符串操作来正确格式化,但它总是能保存为YYYY-MM-DD。这确实令人费解。OLE DB源中的预览将日期显示为MM/DD/YYYY,但当它到达平面文件时,它总是以某种方式更改为yyy-MM-DD

例如,我试着在这里查找解决方案:但没有运气。令人惊讶的是,如果我只是在Excel中打开文件并保存它,那么它将在文本编辑器中显示日期为MM/DD/YYYY,这只会给百慕大三角式的闹剧增添更多的神秘感


如果有什么建议的话,我将非常感激。

已经有一段时间了,但我今天遇到了这个问题,因为我有同样的问题,希望能够省去别人去弄清楚它的麻烦。对我有效的方法是在派生列转换中添加一个新字段,而不是尝试更改现有字段

编辑

我不能对Troy Witthoeft的回答发表评论,但我想指出的是,如果您有日期类型的输入,您将无法执行子字符串。相反,您可以使用如下内容:


DT_WSTR,255个月[就诊日期]+/+DT_WSTR,255天[就诊日期]+/+DT_WSTR,255年[就诊日期]

这是一个日期格式问题

在SQL和SSIS中,日期有一个,即YYYY-MM-DD。忽略它们在数据预览器和/或Excel中的显示方式。日期将根据您的日期显示给您

上图-与美国不同-英国人会将所有日期视为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
另一种方法是让SSI来做。使用表达式添加派生列组件

 SUBSTRING([MyDateColumn],6,2) + "/" + SUBSTRING([MyDateColumn],8,2) + "/" + SUBSTRING([MyDateColumn],1,4)

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

如果我理解正确,您正在导出到一个尚不存在的文件。是否有将SQL列转换为字符串的派生列转换?这里有一个链接向您展示了如何做到这一点:。您需要确保添加的是新列,而不是替换现有列。现在,您应该能够右键单击/显示高级编辑器,并且在输入和输出属性中,您可以观察列的数据类型。它应该一直保持字符串。还有一件事-确保您正在文本编辑器记事本中打开CSV文件进行检查。不要在Excel中打开它-这会让事情变得混乱。csv文件实际上是一个文本文件而不是excel文件…最后,不要害怕删除文本文件目标和readd。有时,即使文件不存在,它也会使其数据类型陷入困境和混乱。不幸的是,与SSIS中的数据类型搏斗每天都会发生。它经常出错,并且固执地拒绝修复它,直到你按照你下次无法记住的顺序执行了一组神奇的操作;我一直在替换派生列步骤中的列,因此我将尝试添加一个新列。此外,我通常会在记事本中检查生成的文件-我使用Excel的唯一一点是,如果我使用Excel打开并保存它,那么当我使用文本编辑器重新打开时,所有内容的格式都正确,但显然这在SSIS中是一项艰巨的任务。虽然plan B会执行某种脚本,用Excel打开它并再次保存,我想。不过,非常感谢你的建议