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
是一个带有值"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”中除了'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' 中的空格!
在从表中选择时,您可以这样做:
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
SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal
. - Aebsubis我认为这与列中是否有其他值无关。它与你如何定义“true”或“false”有关。SQL认为它是一个字符串而不是一个位。在你的列中,我建议使用Case语句,例如:
select ...., case when ColumnName = "True" then 1 else 0 end as Flag1
确保 true 或 false 中没有任何空格。你可以使用以下代码:
rtrim(ltrim(ColumnName))
去除任何空格。