2013-05-03 141 views
1

嘗試使用SQL Server 2008和跨越的一個問題運行給我下面的錯誤信息來構建一個簡單的例子聲明:SQL Case語句錯誤消息8114

Msg 8114, Level 16, State 5, Line 6 Error converting data type varchar to numeric.

我已經隔離導致了問題的腳本如下:

CASE WHEN tPersonLocationHist.LocationCode = 'DC' 
     AND (tPersonJobHist.FullTimeEquivalent = 1) 
     AND (MONTH(tPersonStatusHist.LatestHireDate) < 10) 
     THEN tPersonStatusHist.NormalHoursPerWeek/5 

tPersonStatusHist.NormalHoursPerWeek被格式化爲十進制;然而,我無法讓它計算。

任何提示?結果計算需要以十進制形式(至兩位十進制數字)。

即使我改變THEN語句只是 '7.5',它然後返回:

Msg 245, Level 16, State 1, Line 6 Conversion failed when converting the varchar value '7.5' to data type int.

我使用CONVERT(decimal(4,2),tPersonJobHist.NormalHoursPerWeek * 7.5)嘗試過,但沒有任何運氣。

只有這樣做的事情是這樣做的: CONVERT(int,tPersonJobHist.NormalHoursPerWeek * 7.5),但它是刪除小數,只是給整個整數。你可能會說,我是新來的SQL,仍然在學習繩索,所以你可以給任何幫助,非常感謝。

+1

'NormalHoursPerWeek'的數據類型是什麼? – Taryn 2013-05-03 18:46:40

+0

您可以使用鑄造。 – 2013-05-03 18:47:35

+0

請通讀本博客我寫道:http://blogs.lessthandot.com/index.php/DataMgmt/DBProgramming/MSSQLServer/sql-server-case-when-data-type-problems – 2013-05-03 18:49:04

回答

0

你的其他案例/其他返回varchar?他們應該都返回相同的數據類型。你可能想要將它們轉換/確定。

CAST(CONVERT(decimal(4,2),tPersonJobHist.NormalHoursPerWeek * 7.5) AS varchar(50)) 
+0

我試過這個答案並收到以下錯誤消息: Msg 8115,Level 16,State 8,Line 6 算術溢出錯誤將數字轉換爲數據類型數字。 – scampy74 2013-05-03 19:01:34

+0

你可能會過去99.99,所以你可能會嘗試'十進制(13,2)'或一些不會溢出數據的東西。另外,如果需要,還應該檢查其他'case's和'else'類似的問題。 – 2013-05-03 19:05:37