How to convert a varchar column to bit column in SQL SERVER

眉间皱痕 提交于 2019-12-05 04:24:45

I suspect that there are other values in addition to 'true' and 'false' in the field 'Flag1'. So check for the values in Flag1.

select distinct Flag1 from YouTable.

Here is my proof:

declare @Flag varchar(25) = 'False'
select CONVERT(Bit, @Flag)

It works fine.

However, this will give the same error.

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 Conversion failed when converting the varchar value ' False' to data type bit.

Pay attention to the the space in ' False' in the error message!

While selecting from table, you can do this:

SELECT CASE Flag1 WHEN 'true' THEN 1 ELSE 0 END AS FlagVal

Syntax:

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

I do not think it is to do with if you have other values in your column. Its to do with how you've defined "true" or "false". SQL thinks it's a string rather than a bit. In your column I'd suggest using a Case Statement like:

select ...., case when ColumnName = "True" then 1 else 0 end as Flag1

Make sure you do not have any spaces in true or false. For that you could use:

rtrim(ltrim(ColumnName)) 

To remove any spaces.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!