Sql 案例语句返回';0';

Sql 案例语句返回';0';,sql,Sql,如果值为null或-1,但实际返回的却是0,则需要此case语句返回空字符串。EmployeeCount是一个int,我假设需要将其转换为varchar,但我尝试过的任何方法似乎都不起作用 CASE WHEN EmployeeCount = -1 THEN '' WHEN EmployeeCount IS NULL THEN '' ELSE EmployeeCount END 这也不起作用: CASE WHEN EmployeeCount = -1 THEN '' WH

如果值为null或
-1
,但实际返回的却是
0
,则需要此case语句返回空字符串。EmployeeCount是一个
int
,我假设需要将其转换为varchar,但我尝试过的任何方法似乎都不起作用

CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE EmployeeCount
END
这也不起作用:

CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE CAST(EmployeeCount as varchar(10))
END

我在SQL Server Management Studio中尝试了以下操作:

SELECT 
CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE CAST(EmployeeCount as varchar(10))
END
AS COL1
FROM 
(SELECT -1 as EmployeeCount) t

。。。它确实返回空字符串,而不是0,所以SQL没有问题,SQL之外的东西正在将其转换为0。

我在SQL Server Management Studio中尝试了以下方法:

SELECT 
CASE 
  WHEN EmployeeCount = -1 THEN ''
  WHEN EmployeeCount IS NULL THEN ''
  ELSE CAST(EmployeeCount as varchar(10))
END
AS COL1
FROM 
(SELECT -1 as EmployeeCount) t

。。。它确实返回空字符串,而不是0,所以SQL没有问题,SQL之外的东西正在将其转换为0。

A
case
表达式返回单个类型。如果您有一些
,则
子句计算为字符串,其他子句计算为数字,数据库将确定结果是数字,而不是字符串。这就是为什么您会看到
0
。这就是当转换成一个数字时,
'
的样子

解决方案很简单:
cast()
将结果转换为字符串:

(CASE WHEN EmployeeCount = -1 OR EmployeeCount IS NULL THEN ''
      ELSE CAST(EmployeeCount as VARCHAR(32))
 END)

case
表达式返回单个类型。如果您有一些
,则
子句计算为字符串,其他子句计算为数字,数据库将确定结果是数字,而不是字符串。这就是为什么您会看到
0
。这就是当转换成一个数字时,
'
的样子

解决方案很简单:
cast()
将结果转换为字符串:

(CASE WHEN EmployeeCount = -1 OR EmployeeCount IS NULL THEN ''
      ELSE CAST(EmployeeCount as VARCHAR(32))
 END)

列不能同时是数字和字符串数据。“”是字符串数据0不是。换句话说,列只能是一种类型。由于所有数字都可以是字符串,但并非所有字符串都可以是数字,因此系统会隐式地将您的数据类型转换为字符数据。当EmployeeCount为NULL时,应执行第一个操作@xQbert的意思是,您不能将大小写表达式的结果转换为两种不同的数据类型。因此,您必须对
ELSE
进行
cast(EmployeeCount为varchar(8))
尝试:
当EmployeeCount=-1时,然后合并(cast(EmployeeCount为varchar(255)),“”)
列不能同时是数字和字符串数据。“”是字符串数据0不是。换句话说,列只能是一种类型。由于所有数字都可以是字符串,但并非所有字符串都可以是数字,因此系统会隐式地将您的数据类型转换为字符数据。当EmployeeCount为NULL时,应执行第一个操作@xQbert的意思是,您不能将大小写表达式的结果转换为两种不同的数据类型。因此,对于
其他
尝试:
当EmployeeCount=-1时,然后合并(cast(EmployeeCount为varchar(255)),'')