【问题标题】:Description: "Conversion failed when converting date and/or time from character string."描述:“从字符串转换日期和/或时间时转换失败。”
【发布时间】:2015-02-17 22:07:30
【问题描述】:

以下是我的源表的元数据:

Hours_StageTbl

type        varchar(100)
Op          varchar(100)
SN          varchar(100)
Hours       float
R_Date      varchar(100)
Source      int
BeginDate   date
Age         float

以下是我的目标表的元数据:

Hours

HoursId    PK, uniqueidentifier
SN         varchar(100)
Type       varchar(100)
Source     int
Date       datetime
Op         varchar(100)
Age        float
Hours      float
BornOnDate datetime

以下是我 JOIN 到的表的元数据:

A_Age

Type varchar(50)
SN varchar(50)
Op varchar(50)
Reg varchar(50)
RDateAge decimal
Date date

以下是我的SQL Command Text中的OLE DB Source Editor中的SSIS

SELECT 
    F.Type
   ,F.Op
   ,F.SN
   ,F.Hours
   ,convert(date, F.R_Date +'28', 111) AS 'R_Date'
   ,F.Source
   ,F.BeginDate
   ,F.Age
   ,A.Type
   ,A.SN
   ,A.Op AS 'A_Op'
   ,A.Reg
   ,A.RDateAge
   ,A.Date
   ,(DATEDIFF(dd, convert(date, F.R_Date +'28', 111), GETDATE())/365.00) + A.RDateAge    as 'AdjustedAge'  
FROM 
    Hours_StageTbl F
INNER JOIN 
    A_Age A
    ON 
    F.SN = A.SN
ORDER BY 
    F.SN
   ,F.Date

我的OLE DB Source Editor 流向Data Conversion 并再次将DateSource 表转换为DT_Date,然后流向OLE DB Command

必须注意,Date varchar(100) From Hours_StageTbl(源表)将被插入到Date datetime 中的Hours(目标表)中,我相信这会给我带来问题。

无论我如何尝试修复转换,我都会收到以下错误:

An OLE DB record is available. Source: "Microsoft SQL Server Native Client 11.0" Hresult: 0x80040E07 Description: "Conversion failed when converting date and/or time from character string.".

我花了几个小时试图纠正这个问题。多一双眼睛就好了。

【问题讨论】:

  • 显示F.R_DateF.Date中的数据
  • 这很可能意味着这个表达式:convert(date, F.R_Date +'28', 111) 失败,因为该字段中的数据与所需的格式不匹配(111 是YYYY/MM/DD)。然而,这可能是由于很多事情。解决问题的第一步是运行查询的选择性部分,直到您隔离问题。例如,打开 SSMS 并运行以下命令:SELECT convert(date, R_Date +'28', 111) FROM Hours_StageTbl 你仍然得到错误吗?如果是这样,请检查该字段中的数据并找到与格式不匹配的数据。
  • 现在我仔细观察,您已经在描述中指定了字段R_Date。无论如何,请查看您的数据并找出哪些数据与格式不匹配。
  • @Nick.McDermaid 我明白了。当我重新开始工作时,我会检查并重新发布。
  • @Nick.McDermaid 这是我发帖时的一个错误。我仍然找不到出现此错误的原因。 convert() 没有完全转换吗?

标签: sql-server ssis type-conversion


【解决方案1】:

关于转换的问题(日期,F.R_Date +'28',111)。

不要直接用字符串添加天数。使用函数 DateAdd( 例如 DateAdd(dd,4,R_Date ) )

EG。

转换(日期, DateAdd(dd,28, F.R_Date), 111)

【讨论】:

    猜你喜欢
    • 2012-04-17
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多