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

时间:2014-03-13 15:13:27

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2000

Flag1varchar列,其值为“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.

3 个答案:

答案 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)) 

要删除任何空格。