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"中的空格!
从表中选择时,您可以执行以下操作:
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)