2014-10-20 88 views
0

有一個查詢,我得到這個錯誤:轉換爲時間格式

轉換日期和/或時間從字符串轉換失敗。 這裏的查詢:

Select cast(RESULT_APPROVE_FULL_DATE as date) as RESULT_APPROVE_FULL_DATE, dtvl18, cast(RESULT_APPROVE_FULL_DATE as time) as RESULT_APPROVE_FULL_DATE_2, tdvl18 
from #a1 
left join #b1 
on ADNR18=PATIENT_ID 
and INST18=isuf_lab 
and STNR18=request_number 
and cast(RESULT_APPROVE_FULL_DATE as date)= cast(cast(dtvl18 as varchar) as date) 
and cast(RESULT_APPROVE_FULL_DATE as time)=cast(cast(tdvl18 as varchar) as time) 

問題肯定在於最後一句中,因爲當我刪除它,一切正常),但我需要一個)。也就是說,問題出在tdvl18(decimal(4,0),null)轉換爲時間格式。 由於可以推斷,tdvl18字段看起來像這樣,例如:947,1525,2359等。這些十進制值如何轉換爲時間格式(hh:mm:ss.nnnnnnn)?

謝謝!

+0

請添加一些樣本數據和期望的輸出,因爲它是很難理解如何'947,1525,2359'應被格式化爲時間值。 – Tanner 2014-10-20 09:45:16

+0

嗯,947,1525,2359是樣本數據。期望的格式 - 09:47:00.0000000,15:25:00.0000000等等可能嗎?非常感謝! – Yan 2014-10-20 10:15:29

回答

1

由於SQL Server無法將字符串值識別爲有效時間,因此失敗。所以,你的當前錯誤可以被複制:

declare @someval as varchar(10) = '525'  
select cast(@someval as time) 

-- Conversion failed when converting date and/or time from character string. 

如果使用STUFF方法在正確的位置(最後2位)之前格式化與:值,則轉換應該適用於你的價值觀:

declare @someval as varchar(10) = '525' 
select cast(stuff(@someval, len(@someval) - 1,0, ':') as time) 

-- 05:25:00.0000000 

這似乎直接在十進制值工作過這樣就可以避免鑄造varchar第一:

declare @someval as decimal(4,0) = 525 
select cast(stuff(@someval, len(@someval) - 1,0, ':') as time) 

-- 05:25:00.0000000 

改變你的最後一句話,這可能會奏效,假設RESULT_APPROVE_FULL_DATE正確地鑄造爲時間值:

and cast(RESULT_APPROVE_FULL_DATE as time) 
    = cast(stuff(tdvl18, len(tdvl18) - 1,0, ':') as time) 
+0

工作,謝謝! – Yan 2014-10-20 11:06:32

+0

@Yan沒問題,如果這解決了您的問題,您可以使用向上/向下投票按鈕旁邊的勾號標記此答案。 – Tanner 2014-10-20 11:18:03