如何在SQL SERVER中将一个varchar列转换为bit列

11

Flag1是一个带有值"true"和"false"的varchar列。我需要将其转换为位(bit)列。

当我尝试执行以下操作时:

Convert(Bit,Flag1)

它显示了一个错误

Msg 245, Level 16, State 1, Line 2
Syntax error converting the varchar value 'False' to a column of data type bit.

声明 @flag1 varchar(25) = ' True' -- 前导空格 - Jian Huang
选择情况 @flag1 当 'true' 时,则为 1,当 'false' 时,则为 0,否则为 0。 - Jian Huang
@DanAndrews 抱歉,我还是 SO 的新手。我会移动答案的。 - Jian Huang
@JianHuang 欢迎来到SO!这是一个非常友好的地方,除了用户并不友好。 :) - SQLMason
@DanAndrews 我在这里很开心。^_^。但是,我无法删除我的先前的评论。 - Jian Huang
显示剩余2条评论
3个回答

13

我怀疑在字段“Flag1”中除了'True'和'False'之外还有其他值。因此,请检查Flag1中的值。

选择不同的Flag1从YouTable中。

这是我的证明:

declare @Flag varchar(25) = 'False'
select CONVERT(Bit, @Flag)

它正常工作。

但是,这将产生相同的错误。

declare @Flag varchar(25) = '  False' -- Pay attention to the the space in '  False'!
select CONVERT(Bit, @Flag)

-> 消息 245,级别 16,状态 1,行 2 将 varchar 值 ' False' 转换为数据类型 bit 时转换失败,请注意错误消息中 ' False' 中的空格!


6

在从表中选择时,您可以这样做:

SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal

语法:

CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

我需要在示例中添加“END”关键字。SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal. - Aebsubis

0

我认为这与列中是否有其他值无关。它与你如何定义“true”或“false”有关。SQL认为它是一个字符串而不是一个位。在你的列中,我建议使用Case语句,例如:

select ...., case when ColumnName = "True" then 1 else 0 end as Flag1

确保 true 或 false 中没有任何空格。你可以使用以下代码:

rtrim(ltrim(ColumnName)) 

去除任何空格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接