Sql SSI未从CSV文件中保存正确的月和日字段

Sql SSI未从CSV文件中保存正确的月和日字段,sql,sql-server,date,csv,ssis,Sql,Sql Server,Date,Csv,Ssis,我有一个平面文件,打算通过SSIS导入到表中。该文件有一个日期字段,格式为“d/mm/yyyy”。这些日期最终以“yyyy/mm/dd”的形式存储到数据库中。我之所以知道这一点,是因为我对表数据运行了datepart sql查询来查找。我对它们的存储方式没有问题,因为我可以通过演示对它们进行格式化。 问题是,对于某些日期,日期与月份值交换。ie“3/05/1989”应存储为“1989/05/03”,但最终可能会显示为“1989/03/05”,因此,数据显示与CSV文件中的内容不一致。 我已经搜索

我有一个平面文件,打算通过SSIS导入到表中。该文件有一个日期字段,格式为“d/mm/yyyy”。这些日期最终以“yyyy/mm/dd”的形式存储到数据库中。我之所以知道这一点,是因为我对表数据运行了datepart sql查询来查找。我对它们的存储方式没有问题,因为我可以通过演示对它们进行格式化。 问题是,对于某些日期,日期与月份值交换。ie“3/05/1989”应存储为“1989/05/03”,但最终可能会显示为“1989/03/05”,因此,数据显示与CSV文件中的内容不一致。 我已经搜索了所有可能的解决方案,相信我,如果你愿意,我可以把链接放在这里。我尝试从一个csv文件导出到另一个csv文件,该文件以与“d/mm/yyyy”相同的方式保存“d/mm/yyyy”。 我最后一次尝试是这样的
正如你所看到的,它还没有被标记为答案。有人能帮我吗?

你能告诉我目标表的结构吗?在将d/mm/yyyy格式转换为yyyy/mm/dd格式时应该不会有任何问题。请告诉我数据类型,然后我可以帮助你进一步解决问题。

好的,在搜索了以下内容之后: 1.我使用派生列转换来转换日期字段,并使用以下解决方案拆分日期字符串:。 我很惊讶它没有被标记为答案

  • 因为我知道我的db将切换日期和月份,所以我自己切换了日期和月份,并将结果传递回派生列转换中的同一字段,如下所示: 令牌(FlightDate,“/”,2)+“/”+令牌(FlightDate,“/”,1)+“/”+令牌(FlightDate,“/”,3) 其中2是月,1是日,3是年
  • 现在,结果以正确的方式保存,因此演示文稿与源匹配。
    我知道应该有更好的方法来实现这一点,但这对我来说是可行的,我希望这对任何处于我这种情况的人都是可行的

    如果您有这种格式的日期
    d/MM/yyyy
    ,那么您可以使用下面的表达式将字符串转换为日期

    (DT_DBTIMESTAMP)(Right([DATE],4) + "/" + 
    SUBSTRING([DATE],FINDSTRING( [DATE], "/", 1) +1 , FINDSTRING( [DATE], "/", 2) -1)
    + "/" + substring( [DATE],1,FINDSTRING( [DATE], "/", 1) -1 ) )
    

    使用
    Substring
    在派生转换中提取日期、月份和年份感谢praveen,但正如您所看到的,我在这里有点不懂。你能举个小例子给我指出正确的方向吗?你需要从两件事开始:1。在文本编辑器(不是excel)中打开CSV,观察数据的真实外观。2.发布您正在加载日期的数据类型-是
    DATE
    DATETIME
    还是
    VARCHAR
    ?数据类型是DATE,对于表的结构来说,它并不重要,因为任何带有日期字段的表都会在此处生成相同的结果。