[sql] SQL Server에서 상수 1 또는 0으로 비트를 암시

select 문에서 필드 값으로 사용될 때 1 또는 0을 비트로 표현할 수 있습니까?

예 :

이 경우 statement (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를 사용하고 있습니다)



답변

cast (
  case
    when FC.CourseId is not null then 1 else 0
  end
as bit)

CAST 스펙은 “CAST (expression 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 ...


답변

두 번째 스 니펫을보기에서 ICourseBased의 필드 정의로 추가 할 수 있습니다.

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


답변

아니요, 그러나 해당 표현식의 하위 구성 요소가 아닌 전체 표현식을 캐스트 할 수 있습니다. 사실, 그것은 아마하게 적은 이 경우 읽을.


답변

gbn보다 약간 더 응축되었습니다.

CourseId0이 아닌 것으로 가정

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

COALESCE처럼 ISNULL(),하지만 첫 번째 비를 돌려줍니다.

Non-Zero CourseId는 1로 타입 캐스트되고, null CourseId은 COALESCE가 다음 값 0을 리턴하게합니다.


답변

열을 BIT 및 NOT NULL로하려면 CAST 앞에 ISNULL을 입력해야합니다.

ISNULL(
   CAST (
      CASE
         WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
      END
    AS BIT)
,0) AS IsCoursedBased


답변

불행하게도. 각 값을 개별적으로 캐스팅해야합니다.


답변

SELECT 내부에서 사용할 표현식은

CAST(IIF(FC.CourseId IS NOT NULL, 1, 0) AS BIT)