1

尝试使用 SQL Server 2008 构建一个简单的 case 语句并遇到问题,给我以下错误消息:

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 新手,并且仍在学习绳索,因此非常感谢您提供的任何帮助。

4

2 回答 2

0

您的其他案例/其他情况是否返回 varchar?它们都应该返回相同的数据类型。您可能需要强制转换/转换它们以确定。

CAST(CONVERT(decimal(4,2),tPersonJobHist.NormalHoursPerWeek * 7.5) AS varchar(50))
于 2013-05-03T18:51:43.313 回答
0

首先转换为十进制,然后进行除法:

THEN CONVERT(decimal(4,2), tPersonStatusHist.NormalHoursPerWeek) / 5

或者 cast 是一个选项:

THEN CAST(tPersonStatusHist.NormalHoursPerWeek AS decimal(4,2)) / 5

于 2021-12-18T12:28:11.730 回答