回 帖 发 新 帖 刷新版面

主题:加CASE与不加CASE会产生这种区别吗?

1.下面这条SQL语句可以通过.
select cast(3000 as char) + '/' + cast(88 as char) from table1

2.我把上面语句稍作修改之后变为如下语句:
注:pcs1,pcs2 均为整型
select (case when isnull(pcs1,0)>0 and isnull(pcs2,0)>0 then rtrim(cast(pcs1 as char)) + '/' + rtrim(cast(pcs2 as char)) else pcs1 end) 'abc'
from table1

运行查询报错:
将 varchar 值 '3000/88' 转换为数据类型为 int 的列时发生语法错误。


我的目的是要合并两个数值字段,并且在它们之间用"/"隔开.

请问我该如何写这种语句??

回复列表 (共2个回复)

沙发

错误在else

... else cast(pcs1 as char) end ...

板凳

1楼正确。一般情况下 CASE 语句中各项返回值的数据类型应尽量保持一致。

如各项返回值的数据类型不一致,返回值的数据类型将由它们中类型优先级最高者决定。不论返回值类型如何,都将转换成最高优先级类型。

Int 的优先级高于 char, 因此语句试图把 '3000/88' 转换为数据类型为 int 的列时发生语法错误。以下是 MS SQL Sever 的数据类型优先级:

datetime (highest) 
smalldatetime 
float 
real 
decimal 
money 
smallmoney 
int 
smallint 
tinyint 
bit 
ntext 
text 
image 
timestamp 
nvarchar 
nchar 
varchar 
char 
varbinary 
binary 
uniqueidentifier (lowest) 

我来回复

您尚未登录,请登录后再回复。点此登录或注册