我有这个查询
SELECT CASE WHEN dbo.CFE_PPHY.P77 IS NOT NULL OR dbo.CFE_PPHY.P77 <>'' THEN MONTH(dbo.CFE_PPHY.P77) WHEN dbo.CFE_PPHY.P70 IS NOT NULL OR dbo.CFE_PPHY.P70 <>'' THEN MONTH(dbo.CFE_SERVICE_EVTS.C10_2) ELSE COALESCE(CONVERT(VARCHAR,dbo.CFE_PPHY.P77)+ CONVERT(VARCHAR,dbo.CFE_SERVICE_EVTS.C10_2),'toto') END AS CFELiasse_DateEffetEIRL_MM_N FROM CFE_PPHY LEFT JOIN CFE_SERVICE_EVTS ON CFE_PPHY.colA = CFE_SERVICE_EVTS.colB
这ELSE部分让我头疼。
ELSE
列CFE_PPHY.P77和CFE_SERVICE_EVTS.C10_2具有日期时间格式。我正在把它们变成varchar。但是,当我运行查询时,出现以下错误
CFE_PPHY.P77
CFE_SERVICE_EVTS.C10_2
消息245,级别16,状态1,行1将varchar值“ toto”转换为数据类型int时,转换失败。
显然,我不能转向toto整数。很公平。但是,从我的角度来看,我已经将datetime格式转换为varchar格式,因此它应该可以完成工作。
toto
我哪里错了?
谢谢
您必须将所有的case表达式都转换为varchar。SQL决定将字段设置为int,因此“ toto”无效。如果将所有表达式都转换为varchar,则应解决此错误。
http://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of- data-type-precedence/