2013-05-03 663 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