Почему я не могу использовать битовое поле в качестве логического выражения в операторе SQL? - PullRequest
11 голосов
/ 02 декабря 2010

Я хочу выбрать что-то условно в зависимости от того, является ли битовое поле истинным или ложным. Это был синтаксис, который я первоначально попробовал:

CASE WHEN isSoon THEN 'Soon' ELSE 'Not so soon' END As HowSoon

Это имеет смысл для меня, так как то, что следует за "КОГДА", должно быть логическим выражением, которое isSoon является битовым полем. Однако это не сработало. В итоге я должен был сделать:

CASE WHEN isSoon = 1 THEN 'Soon' ELSE 'Not so soon' END As HowSoon

Мне кажется, что это излишне ... Это похоже на написание if(isSoon == True) на языке программирования вместо более интуитивного if(isSoon) и идет вразрез. Почему SQL настроен так? Это потому что битовые поля на самом деле не булевы?

1 Ответ

13 голосов
/ 02 декабря 2010

Поскольку тип данных не является логическим типом , это тип данных, используемый для оптимизации хранилища битов.

Тот факт, что строки "истина" и "ложь" могут быть преобразованы в бит, может вводить в заблуждение, однако, цитируя из MSDN , бит равен "Целочисленный тип данных, который может принять значение 1, 0 или NULL. "

...