【问题标题】:TSQL NVARCHAR Conversion Error inside CASE statementCASE 语句中的 TSQL NVARCHAR 转换错误
【发布时间】:2015-08-09 09:33:00
【问题描述】:

这个选择快把我逼疯了。
错误是:

将 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 

【问题讨论】:

  • 在哪里转换为 int?
  • 你能展示整个声明吗?你确定它在那里失败了吗?尝试注释掉这部分,还会出现同样的错误吗?

标签: sql-server tsql case-when


【解决方案1】:

由于隐式转换,您会收到此错误。 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

在这两种情况下都应该CONVERT 并返回NVARCHAR(50),这样就不会有隐式转换。像这样。

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

【讨论】:

  • 很棒的收获。没想到。
  • 抱歉耽搁了 ughai(几个月,我知道)。但终于完成了!
猜你喜欢
  • 2013-08-15
  • 2019-01-07
  • 1970-01-01
  • 2015-11-03
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2014-08-09
相关资源
最近更新 更多