如何在SQL SERVER中将varchar列转换为位列

use*_*579 8 sql sql-server sql-server-2005 sql-server-2000 sql-server-2008

Flag1是一个varchar值为"true"和"false"的列.我需要将其转换为位列.

当我尝试这样做时:

Convert(Bit,Flag1)
Run Code Online (Sandbox Code Playgroud)

它显示错误

Msg 245, Level 16, State 1, Line 2
Syntax error converting the varchar value 'False' to a column of data type bit.
Run Code Online (Sandbox Code Playgroud)

Jia*_*ang 10

我怀疑在'Flag1'字段中除了'true'和'false'之外还有其他值.因此,请检查Flag1中的值.

从YouTable中选择不同的Flag1.

这是我的证明:

declare @Flag varchar(25) = 'False'
select CONVERT(Bit, @Flag)
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是,这会产生同样的错误.

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

- > Msg 245,Level 16,State 1,Line 2将varchar值'False'转换为数据类型位时转换失败.

请注意错误消息中"False"中的空格!


Rag*_*ull 5

从表中选择时,您可以执行以下操作:

SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal
Run Code Online (Sandbox Code Playgroud)

句法:

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
Run Code Online (Sandbox Code Playgroud)