Предположим, что бит с константой 1 или 0 в SQL Server

Можно ли выразить 1 или 0 как бит при использовании в качестве значения поля в инструкции select?

например.

В этом случае оператор (который является частью оператора select). 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)

106
задан 23 июля '09 в 19:01
источник поделиться
8 ответов
cast (
  case
    when FC.CourseId is not null then 1 else 0
  end
as bit)

Спецификация CAST - "CAST (выражение AS type)". CASE является выражением в этом контексте.

Если у вас есть несколько таких выражений, я бы объявлял бит vars @true и @false и использовал их. Или используйте UDF, если вы действительно хотели...

DECLARE @True bit, @False bit;
SELECT @True = 1, @False = 0;  --can be combined with declare in SQL 2008

SELECT
    case when FC.CourseId is not null then @True ELSE @False END AS ...
151
ответ дан 23 июля '09 в 19:04
источник

Вы можете добавить второй фрагмент кода в качестве определения поля для объекта в приложении.

DECLARE VIEW MyView
AS
  SELECT
  case 
  when FC.CourseId is not null then cast(1 as bit)
  else cast(0 as bit)
  end
  as IsCoursedBased
  ...

SELECT ICourseBased FROM MyView
7
ответ дан 23 июля '09 в 19:07
источник

Нет, но вы можете использовать целое выражение, а не субкомпоненты этого выражения. Фактически, это, вероятно, делает его менее читаемым в этом случае.

5
ответ дан 23 июля '09 в 19:04
источник

Чуть более сжатый, чем gbn's:

Предполагая, что CourseId отличен от нуля

CAST (COALESCE(FC.CourseId, 0) AS Bit)

COALESCE похож на ISNULL(), но возвращает первый не-нуль.

A Non-Zero CourseId получит тип-cast в 1, а null CourseId приведет к тому, что COALESCE вернет следующее значение, 0

3
ответ дан 23 янв. '14 в 20:49
источник

Если вы хотите, чтобы столбец BIT и NOT NULL, вы должны поставить ISNULL перед CAST.

ISNULL(
   CAST (
      CASE
         WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
      END
    AS BIT)
,0) AS IsCoursedBased
2
ответ дан 14 сент. '15 в 14:35
источник

К сожалению, нет. Вы должны будете отнести каждое значение отдельно.

1
ответ дан 23 июля '09 в 19:04
источник

Наслаждайтесь этим:) Без каждого отдельного значения.

SELECT ...,
  IsCoursedBased = CAST(
      CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
    AS BIT
  )
FROM fc
0
ответ дан 13 дек. '17 в 17:10
источник

IIF (FC.CourseId NOT NULL, 1, 0)

0
ответ дан 26 янв. '17 в 1:29
источник

Другие вопросы по меткам или Задайте вопрос