SYSK 131: SQL: String to Bit Conversion

Say you want to convert any of the following ‘1’, ‘-1’, ‘true’, ‘t’, ‘True’, ‘t’, ‘Yes’ to bit 1 and ‘0’, ‘f’, ‘false’, NULL to bit 0.  How would you do that in one SQL statement?

 

One way (special thanks to Bill Wendel who presented this solution) is this:

select case when charindex(left(@value, 1), 'tT1yY-') > 0 then 1 else 0 end

 

Used in a function it’ll like this:

 

Create Function dbo.fnIsTrue(@Value varchar(10))

            Returns bit

AS

            BEGIN

                        Return (Case WHEN CharIndex(left(@Value,1), 'tT1yY-') > 0 THEN 1 ELSE 0 END)

            END

GO

/*Example Calls:

  Select dbo.fnIsTrue('1') --returns 1

  Select dbo.fnIsTrue('-1') --returns 1

  Select dbo.fnIsTrue('true') --returns 1

  Select dbo.fnIsTrue('t') --returns 1

  Select dbo.fnIsTrue('0') --returns 0

  Select dbo.fnIsTrue('f') --returns 0

  Select dbo.fnIsTrue('false') --returns 0

  Select dbo.fnIsTrue(NULL) --returns 0

*/