CASE语句中的TSQL NVARCHAR转换错误

6
这个选择框让我抓狂了。
错误信息如下:

将nvarchar类型的值“17.30 h”转换为int数据类型时发生转换错误。

数据如下:

(DateTime)   (Nvarchar)  (DateTime)
DATAINICI    DATAMANUAL  DATAFI
null         17.30 h     10/01/2015
01/01/2015   20.30 h     null

这个语句是:

CASE WHEN  dbo.Activitat.DataInici is null 
THEN DATEPART(DAY,Activitat.Datafi) 
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual)
END 

4
转换为整型的位置在哪里? - Giorgi Nakeuri
3
你能展示整个语句吗?你确定它是在那里失败了吗?尝试注释掉这一部分,你还会得到相同的错误吗? - Giannis Paraskevopoulos
1个回答

10
您之所以出现此错误是因为存在隐式转换。CASE 语句的一部分返回 NVARCHAR(50) 类型,例如 CONVERT(NVARCHAR(50), dbo.Activitat.DataManual),不能转换为 int 类型;而另一部分返回 int 类型,例如 DATEPART(DAY,Activitat.Datafi)。 类似以下代码也会出现相同的错误。
SELECT CASE WHEN 1=2 THEN 1 ELSE 'errorstring' END
你应该在两种情况下都使用 NVARCHAR(50) 进行 CONVERT 并返回结果,这样就不会有隐式转换。类似于以下内容。
CASE WHEN  dbo.Activitat.DataInici is null 
THEN CONVERT(NVARCHAR(50),DATEPART(DAY,Activitat.Datafi))
ELSE CONVERT(NVARCHAR(50), dbo.Activitat.DataManual)
END 

3
太棒了,没想到。 - Giorgi Nakeuri
抱歉让您久等了,我知道已经拖延了好几个月。 但是终于完成了! - JoeCool-Avismón

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,