一尘不染

t-sql在某种情况下可能使用其他数据类型?

sql

我有这个查询

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部分让我头疼。

CFE_PPHY.P77CFE_SERVICE_EVTS.C10_2具有日期时间格式。我正在把它们变成varchar。但是,当我运行查询时,出现以下错误

消息245,级别16,状态1,行1将varchar值“ toto”转换为数据类型int时,转换失败。

显然,我不能转向toto整数。很公平。但是,从我的角度来看,我已经将datetime格式转换为varchar格式,因此它应该可以完成工作。

我哪里错了?

谢谢


阅读 156

收藏
2021-03-17

共1个答案

一尘不染

您必须将所有的case表达式都转换为varchar。SQL决定将字段设置为int,因此“
toto”无效。如果将所有表达式都转换为varchar,则应解决此错误。

http://blog.sqlauthority.com/2010/10/08/sql-server-simple-explanation-of-
data-type-precedence/

2021-03-17