source

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

ittop 2023. 4. 7. 21:54
반응형

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

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)

CAST 사양은 "CAST(expression AS type)"입니다.CASE는 이 컨텍스트의 표현입니다.

이러한 표현이 여러 개 있는 경우 비트 값 @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()단, Null 이외의 첫 번째 값은 반환됩니다.

0이 아닌 것CourseId타입캐스트는 1이 됩니다만, null은 null입니다.CourseIdCOALESCE는 다음 값 0을 반환합니다.

열을 NULL이 아닌 BIT로 하려면 CAST 앞에 ISULL을 붙여야 합니다.

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 fc.CourseId, IsCoursedBased = CAST(CASE WHEN fc.CourseId IS NOT NULL THEN 1 ELSE 0 END AS BIT) 
FROM fc

언급URL : https://stackoverflow.com/questions/1172795/imply-bit-with-constant-1-or-0-in-sql-server

반응형