Flag1
是varchar
列,其值为“true”和“false”。我需要将其转换为位列。
当我尝试这样做时:
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.
答案 0 :(得分:7)
我怀疑除了' true'之外还有其他值。并且' false'在现场' Flag1'。因此,请检查Flag1中的值。
从YouTable中选择不同的Flag1。
这是我的证据:
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)
- > Msg 245,Level 16,State 1,Line 2 转换varchar值时转换失败'假'数据类型位。
注意'中的空间。假'在错误消息中!
答案 1 :(得分:4)
从表格中选择时,您可以这样做:
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
答案 2 :(得分:0)
如果您的栏中有其他值,我认为这无关。它与您定义“ true”或“ false”的方式有关。 SQL认为这是一个字符串,而不是一点点。在您的专栏中,我建议使用以下案例声明:
select ...., case when ColumnName = "True" then 1 else 0 end as Flag1
请确保您没有任何对或错的空格。为此,您可以使用:
rtrim(ltrim(ColumnName))
要删除任何空格。