SQL中的数据转换错误,不确定它可能指的是哪个字段



Msg 8114,级别16,状态5,行1将数据类型varchar转换为数字时出错。

下面是我正在使用的代码以及代码中提到的字段的模式。在这背后的一些上下文中,我有一组indcode列表。我只给下面一个,但总共有350个。当我按indcode、area和ownership查询时,很可能数据不存在。因此,我为什么有英语。最后,我需要包含值suppress=1的行显示为N/a。

对于我查询的每个indcode,我都需要一个结果。结果可能是实际数据或某些文本(NULL、N/A等(。

最后是预期结果。我只给出了一个indcode的代码,但为了给这个例子一些深度,我已经包含了六个。

select
CASE
WHEN suppress = 0 then isnull (mnth1emp, 0)
ELSE 'N/A'
END as mnth1emp,
CASE 
WHEN suppress = 0 THEN isnull (mnth2emp, 0)
ELSE 'N/A'
END as mnth2emp,
CASE
WHEN suppress = 0 THEN isnull (mnth3emp, 0)
ELSE 'N/A'
END as mnth3emp
from dbo.industryimport20172f
where area='000003' and indcode='21' and ownership='00' 
suppress char (1)
mnth1emp   numeric(9,0)
mnth2emp   numeric(9,0)
mnth3emp   numeric(9,0)
area       char(6)
indcode   char (6)
ownership  char(2)
123    456    789
1      2      3
Null   null   null
2      3      4
3      4      5
Null    Null   Null

因此,首先跳出的是:

a( 当你要求在case语句中返回数字时,当你到达ELSE时,你要求一个字符串。尝试将所有字段强制转换为varchars,然后将其输入为字符串:

CASE
WHEN cast(suppress as varchar) = '0' then isnull (cast(mnth1emp as varchar), '0')
ELSE 'N/A'
END as mnth1e

您可能不需要强制抑制。

b( supress里面除了数字之外还有别的东西吗?如果是这样,您需要将零作为字符串:

CASE WHEN supress = '0' --etc.

相关内容

  • 没有找到相关文章

最新更新