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(式ASタイプ)」です。 CASEは、このコンテキストではexpressionです。
そのような式が複数ある場合は、ビット変数@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のフィールド定義として2番目のスニペットを追加できます。
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
いいえ。ただし、式のサブコンポーネントではなく、式全体をキャストできます。実際、この場合、おそらくless読み取り可能になります。
列がBITおよびNOT NULLである場合は、CASTの前にISNULLを配置する必要があります。
ISNULL(
CAST (
CASE
WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
END
AS BIT)
,0) AS IsCoursedBased
Gbnよりも少し凝縮されています。
CourseId
がゼロ以外の場合
CAST (COALESCE(FC.CourseId, 0) AS Bit)
COALESCE
はISNULL()
に似ていますが、最初の非NULLを返します。
ゼロ以外のCourseId
は1に型キャストされ、null CourseId
はCOALESCEが次の値0を返すようにします
残念だけど違う。各値を個別にキャストする必要があります。
これをお楽しみください:)各値を個別にキャストせずに。
SELECT ...,
IsCoursedBased = CAST(
CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
AS BIT
)
FROM fc
SELECT内で使用する式は
CAST(IIF(FC.CourseId IS NOT NULL, 1, 0) AS BIT)