ما هي أفضل طريقة لتحويل قيمة int أو null إلى قيمة منطقية في استعلام SQL؟

StackOverflow https://stackoverflow.com/questions/177956

سؤال

ما هي أفضل طريقة لتحويل قيمة int أو null إلى قيمة منطقية في استعلام SQL، مثل:

  • أي قيمة غير فارغة هي حقيقي في النتائج
  • أي قيمة فارغة خطأ شنيع في النتائج
هل كانت مفيدة؟

المحلول

على حد علمي (صححني إذا كنت مخطئا)، لا يوجد مفهوم للقيم المنطقية الحرفية في SQL.يمكن أن يكون لديك تعبيرات يتم تقييمها إلى قيم منطقية، لكن لا يمكنك إخراجها.

ومع ذلك، يمكنك استخدام CASE WHEN لإنتاج قيمة يمكنك استخدامها في المقارنة:

SELECT 
    CASE WHEN ValueColumn IS NULL THEN 'FALSE' ELSE 'TRUE' END BooleanOutput 
FROM 
    table 

نصائح أخرى

لا داعي لاستخدام الحالة...متى:

select (column_name is not null) as result from table_name;

يُرجع 1 لجميع الحقول غير NULL و0 لجميع الحقول التي تكون NULL، وهو أقرب ما يمكنك الوصول إليه من القيم المنطقية في SQL.

SELECT 
    CASE
        WHEN thevalue IS NULL THEN 0
        ELSE 1
    END AS newVal
FROM .... (rest of select)

أعتقد أن الأمر يسير على هذا النحو

في الواقع، قد يلزم أن تكون قيمة ISNULL عندما تكون القيمة NULL ثم 0

على افتراض أنك تريد قيمة 0،1 كعائد، وأننا نتحدث عن عدد صحيح سأستخدم المنطق المحدد بواسطة توربيورن ولفه في الوظيفة

create function dbo.isNotNull(@a int)
returns bit
as
begin
return isnull(@a-@a+1,0)
end

لذا يمكنك استخدامه وقتما تشاء بمجرد الاتصال

select dbo.isNotNull(myIntColumn) from myTable

الجواب مقدم من تومالاك يعد أكثر عالمية لأنه يعمل مع أي نوع بيانات

قد ترغب في إجراء تحويل (BIT، Value) لنتيجتك.لأن شيئًا ما سيُرجعه SQL خطأً مفاده أن القيمة ليست منطقية.

isnull(column - column + 1, 0) != 0

في Oracle، بافتراض أنك تستخدم 0 للخطأ و1 للصواب: -

SELECT DECODE( col, NULL, 0, 1) FROM ...

يمكنك أيضًا كتابة هذا باستخدام بناء جملة CASE، ولكن ما سبق هو اصطلاحي في Oracle.DECODE يشبه إلى حد ما المفتاح/الحالة؛إذا كان العمود NULL فسيتم إرجاع 0، وإلا 1.

أقصر ما أعرفه عن Oracle:

SELECT NVL2(nullableColumn, 1, 0) FROM someTable

NVL2(value, ifNotNull, ifNull) عائدات ifNotNull إذا value ليست فارغة، و ifNull خلاف ذلك.

عادة عند استخدام 1، فهذا يعني أنه صحيح وإلا في حالة أخرى.

لذا:

SELECT  IsDefault = CASE WHEN IsDefault = 1 THEN 'true' ELSE 'false' END
FROM table
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top