2014-12-19 91 views
0

下面是我的源表的元數據:描述:「從字符串轉換日期和/或時間時轉換失敗。」

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 

以下是我在OLE DB Source Editor在:

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,再轉換DateSourceDT_Date然後流向OLE DB Command

必須指出的是,Date varchar(100)Hours_StageTbl(源表)被插入到Date datetimeHours(目標表),是什麼給我的問題,我相信。

不管我做什麼來嘗試解決我得到以下錯誤的轉換:

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.".

我花了幾個小時試圖糾正這一點。額外的一雙眼睛會很棒。

+0

顯示在'F.R_Date'和'F.Date' – 2014-12-19 01:22:05

+1

數據這很可能意味着以下表達式:'轉換(日期,F.R_Date + '28',111)'失敗,因爲該字段中的數據與所需格式不匹配(111爲「YYYY/MM/DD」)。然而,這可能是由於一些事情。解決問題的第一步是運行查詢的選擇性部分,直到找出問題。例如,打開SSMS並運行:'SELECT convert(date,R_Date + '28',111)FROM Hours_StageTbl'你仍然得到錯誤嗎?如果是,請檢查該字段中的數據並查找與格式不匹配的數據。 – 2014-12-19 01:27:20

+1

現在我仔細看看,您在描述中指定了'R_Date'字段。無論如何,仔細查看您的數據並找出哪些數據與格式不匹配。 – 2014-12-19 01:29:02

回答

1

轉換問題(日期,F.R_Date + '28',111)。

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

EG。

轉換(日期,使用DateAdd(DD,28,F.R_Date),111)

相關問題