我有这个查询
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
The ELSE
部分让我头疼。
列CFE_PPHY.P77
and CFE_SERVICE_EVTS.C10_2
有日期时间格式。我正在把它们变成varchar
。然而,当我运行查询时,出现以下错误
消息 245,级别 16,状态 1,第 1 行 将 varchar 值“toto”转换为数据类型 int 时转换失败。
显然我无法转身toto
为一个整数。很公平。然而,从我的角度来看,我已经转换了datetime
格式为varchar
格式,所以它应该完成这项工作。
我哪里错了?
Thanks.
您必须将所有 case 表达式转换为 varchar。 SQL 决定将该字段设置为 int,因此“toto”无效。如果所有表达式都转换为 varchar,则应该解决此错误。
http://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of-data-type-precedence/ http://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of-data-type-precedence/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)