views:

84

answers:

4

Hello, I've found it very weird that simple code like this is not valid:

select * from table where field=true

The alternative apparently being

select * from table where field='true'

Ok, guess I can live with that. For one reason or another I needed to do something like this recently:

select true as somefield,...

The alternative to get types and everything right was much more ugly though:

select cast('true' as bit) as somefield,...

Am I missing something? Is there actually some built in way to get a true or false value as a boolean without casting?

+2  A: 

Use 1 or 0, assuming your field is of type bit.

select * from table where field=1

select * from table where field=0
Damien Dennehy
+1  A: 

Bits are the datatype most commonly used to represent a boolean in TSQL. I typically do something like this

select CAST(1 as bit) as somefield
Andy_Vulhop
+2  A: 

Sql Server doesn't have a boolean datatype you can store in a table, but it does contain a bit data type you can store.

However, the true keyword you see IS a boolean value. Sql Server only uses the boolean data type for results for its Comparison Operators, which can return three values, TRUE, FALSE, and UNKNOWN.

It is important to know the distinction between the two.

SELECT *
FROM Table
WHERE Field = 1 --Field = true

To store boolean values in a table, use the bit datatype. Use 1 for true, 0 for false, and Null for unknown.

Meiscooldude
+1  A: 

I want to add to all current answers only one more method to get a boolean without casting in SQL Server:

DECLARE @myTrue bit = 1;
-- or two lines for old version of SQL Server
-- DECLARE @myTrue bit;
-- SET @myTrue = 1;

SELECT @myTrue AS somefield
Oleg