يعني قليلا مع ثابت 1 أو 0 في SQL Server
-
19-09-2019 - |
سؤال
هل من الممكن التعبير عن 1 أو 0 كما بتستخدم كقيمة حقل في عبارة مختارة؟
على سبيل المثال
في هذه الحالة الحالة (التي هي جزء من عبارة مختارة) icoursebased هي من النوع الدولي.
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)
المواصفات المصبوب هو "يلقي (التعبير بالنوع)". القضية هي التعبير في هذا السياق.
إذا كان لديك العديد من التعبيرات، فسأعلن Bit VarsTrue و False واستخدامها. أو استخدم UDFS إذا كنت ترغب حقا ...
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 ...
نصائح أخرى
قد تضيف المقتطف الثاني كتعريف حقل ل cheverbased في طريقة عرض.
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
غير صفر
CAST (COALESCE(FC.CourseId, 0) AS Bit)
COALESCE
هو مثل an. ISNULL()
, ، ولكن إرجاع أول غير فارغة.
غير صفر CourseId
سوف تحصل على نوع من نوع إلى 1، في حين أن null CourseId
سوف يسبب الاهتمام في إعادة القيمة التالية، 0
إذا كنت تريد أن يكون العمود قليلا وليس فارغا، فيجب أن تضع ISNULL قبل المصبوب.
ISNULL(
CAST (
CASE
WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
END
AS BIT)
,0) AS IsCoursedBased
للاسف لا. سوف تضطر إلى إلقاء كل قيمة على حدة.
التعبير لاستخدام الداخل المحددة يمكن أن يكون
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