Я нашел это очень странным, что простой код как это не действителен:
select * from table where field=true
Альтернатива, по-видимому, являющаяся
select * from table where field='true'
Хорошо, угадайте, что я могу жить с этим. По той или иной причине я должен был недавно сделать что-то вроде этого:
select true as somefield,...
Альтернатива для разбираний в типах и все было намного более ужасным хотя:
select cast('true' as bit) as somefield,...
Я пропускаю что-то? Разве существуют ли на самом деле некоторые созданные способом получить истинное или ложное значение как булевскую переменную без кастинга?
Sql Server не имеет логического типа данных, который вы можете хранить в таблице, но он содержит битовый тип данных, который вы можете хранить.
Однако ключевое слово true
, которое вы видите, ЯВЛЯЕТСЯ логическим значением. Sql Server использует только логический тип данных для результатов своих операторов сравнения, которые могут возвращать три значений: TRUE, FALSE и UNKNOWN.
Важно знать разницу между ними.
SELECT *
FROM Table
WHERE Field = 1 --Field = true
Для хранения логических значений в таблице используйте битовый тип данных. Используйте 1 для истинного
, 0 для ложного
и Null для неизвестного
.
Используйте 1 или 0, если ваш поле имеет тип бит.
select * from table where field=1
select * from table where field=0
Я хочу добавить ко всем текущим ответам только еще один метод для получения логического
без преобразования в 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
Биты - это тип данных, наиболее часто используемый для представления булевых значений в TSQL. Обычно я делаю примерно так
select CAST(1 as bit) as somefield