문제

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

예를 들어

이 경우 (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)

캐스트 사양은 "캐스트 (표현식으로 표현)"입니다. 사건은 an입니다 표현 이 맥락에서.

그러한 표현식이 여러 개있는 경우 비트 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 ...

다른 팁

두 번째 스 니펫을 icourse 기반의 필드 정의로 추가 할 수 있습니다.

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보다 약간 더 응축됩니다.

가정합니다 CourseId 0이 아닙니다

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

COALESCE 같다 ISNULL(), 그러나 첫 번째가 아닌 것을 반환합니다.

0이 아닌 CourseId 유형 캐스트는 1으로, 널 CourseId Coalesce가 다음 가치를 반환하게합니다.

열이 비트이고 null이 아닌 경우, 캐스트 전에 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)

이것을 즐기십시오 :) 각 가치를 개별적으로 캐스팅하지 않고도 즐기십시오.

SELECT ...,
  IsCoursedBased = CAST(
      CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
    AS BIT
  )
FROM fc
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top