1. ホーム
  2. sql

[解決済み] SQL Serverで定数1または0を持つビットをインプリメントする

2022-04-24 13:40:23

質問

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 ...