Почему я не могу использовать бит-поле в качестве логического выражения в выражении case SQL?

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

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

Это имеет смысл для меня, так как "WHEN" должно быть логическим выражением, которое isSoon является, так как оно является битовым полем. Однако это не сработало. В конце концов я должен был сделать:

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

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

Ответ 1

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

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