【问题标题】:Date data from Text file to date time in SQL Server从文本文件到 SQL Server 中的日期时间的日期数据
【发布时间】:2012-10-19 17:26:58
【问题描述】:

我使用一个平面文件作为源,其中有几列属于日期格式,我已将所有数据放入预定义的 SQL Server 表中。

例子:-

平面文件

CaseNO|CaseType|CDate
1 |组织 |1\12\2012
2 |PGD |3\3\2011

当我使用数据查看器检查时,它看起来像 2012-12-1 00:00:00.0000000。但 OLE DB 连接会产生以下错误。

[OLE DB Destination [7546]] Error: There was an error with input column 
"CDate" (8799) on input "OLE DB Destination Input" (7559). The column status
returned was: "The value could not be converted because of a potential loss of data.".

请指导我...感谢您的帮助。

343

【问题讨论】:

  • 我的第一个猜测是其中一条记录的价值不高。您可以尝试只导入前几行,以确保它不是一般问题。
  • 目标表中CDate列的数据类型和CDate id数据流的数据类型是什么?

标签: sql sql-server sql-server-2008 ssis


【解决方案1】:

这可能是因为反斜杠。在转换之前尝试用“/”替换“\”。

这也可能是日期格式问题。根据排序规则等设置,“2012 年 1 月 2 日”可以解释为 1 月 2 日或 2 月 1 日。这不会导致问题,但是“2012 年 1 月 31 日”之类的内容可能会导致类型转换错误排序规则,因为没有一个月 31。

【讨论】:

  • 感谢您的帮助卞...我认为这是问题所在,问题仍然是我的目标表中没有数据,我尝试将平面文件数据上传到其中。在平面文件中,我用 mm-dd-yy 格式的日期检查了他们拥有的其他表格 (2012-09-14 14:01:18.593) yy-dd-mm hh.mm.ss.ms ....但可以请告诉我如何将其更改为所需的格式?
  • 您所要做的就是将值转换为日期时间。在源和目标之间添加一个派生列。使派生列名称 CDateTime 并粘贴 (DT_DBTIMESTAMP)REPLACE(CDate,"\\","/") 作为表达式值。现在将 CDateTime 映射到 OLE DB 目标中的相应列。
【解决方案2】:

看起来您已经将数据暂存到了 sql server 表中。使用 SQL 命令而不是选择 OLEDB 源中的表。如下编写查询并映射到目的地。

SELECT Id,CaseType,convert(datetime,CDATE,101) as Cdate from

如果您直接使用平面文件加载到目标表。您应该使用派生列转换来解析它以提及格式[dd/mm/yyyy] 并转换为数据时间。

谢谢, 高达曼

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多