Можно ли выразить 1 или 0 как бит при использовании в качестве значения поля в операторе выбора?
например
В этом случае оператор (который является частью оператора выбора) ICourseBased имеет тип int.
case
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased
Чтобы получить битовый тип, я должен привести оба значения.
case
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased
Есть ли краткий способ выражения значений в виде битов без необходимости приведения каждый раз?
(Я использую MS SQL Server 2005)
sql
sql-server
tsql
bit
Дэмиен МакГиверн
источник
источник
Вы можете добавить второй фрагмент в качестве определения поля для ICourseBased в представлении.
источник
Нет, но вы могли бы привести все выражение, а не его подкомпоненты. На самом деле, это, вероятно, делает его менее читабельным в этом случае.
источник
Чуть более сжатый, чем у gbn:
Предполагая, что
CourseId
это ненулевоеCOALESCE
какISNULL()
, но возвращает первый ненулевой.Ненулевое значение
CourseId
будет приведено к типу 1, в то время как нулевое значениеCourseId
заставит COALESCE вернуть следующее значение, 0источник
Если вы хотите, чтобы столбец был BIT, а НЕ NULL, вы должны поставить ISNULL перед CAST.
источник
К сожалению нет. Вам придется разыгрывать каждое значение индивидуально.
источник
Выражение для использования внутри SELECT может быть
источник
case when ... else ... end
один, все равно приходится кастовать1
и0
на БИТ типа.Наслаждайтесь этим :) Без применения каждого значения в отдельности.
источник