尝试创建二进制标志时,SQL case语句出错?

时间:2018-07-18 15:50:01

标签: sql select case ssms

这是我要查询案例结构的查询:

SELECT TOP 1 CASE 130
WHEN '000000000000000' THEN '0'
WHEN '' THEN '0'
WHEN 'XXX' THEN '0'
WHEN 'RETIRED' THEN '0'
WHEN 'STUDENT' THEN '0'
ELSE '1'
END AS employed_flag
INTO #employedbeta
FROM CreditBureau.Experian

我只是想创建一个新的临时表,但我希望我的案子能首先工作。我不断收到错误消息:

将varchar值“ XXX”转换为数据类型int时转换失败。

在数据库中,列130是一个字符,我不知道为什么它认为我想将其设为数字​​。 SQL Server Management Studio,如果有关系的话。 列名是130,由于我在这里重写了该列,所以我将其保留为“ 1”,但是无论实际查询如何,我都会收到错误消息。

2 个答案:

答案 0 :(得分:3)

130是整数文字。如果这确实是列名,则必须使用双引号将其转义。附带说明一下,您可能也应该在else分支中返回相同的类型(char):

CASE "130"
WHEN '000000000000000' THEN '0'
WHEN '' THEN '0'
WHEN 'XXX' THEN '0'
WHEN 'RETIRED' THEN '0'
WHEN 'STUDENT' THEN '0'
ELSE '1'
END AS employed_flag

答案 1 :(得分:0)

130是一个非常糟糕的列名。但是,我将逻辑简化为:

SELECT TOP 1 (CASE WHEN [130] IN ('000000000000000', '', 'XXX', 'RETIRED', 'STUDENT')
                   THEN 0 ELSE 1
              END) AS employed_flag
INTO #employedbeta
FROM CreditBureau.Experian;

请注意,我还将employed_flag更改为数字值而不是字符串。这对我来说更有意义。