سؤال

أرغب في تجنب وجود العديد من الشيكات مثل ما يلي في التعليمات البرمجية الخاصة بي:

myObj.someStringField = rdr.IsDBNull(someOrdinal) 
                            ? string.Empty 
                            : rdr.GetString(someOrdinal);

احسب أنني يمكن أن يكون لدي استعلامي تعتني ب Nulls عن طريق القيام بشيء مثل هذا:

SELECT myField1, [isnull](myField1, '') 
FROM myTable1
WHERE myField1 = someCondition

أنا أستخدم SQLite على الرغم من أنه لا يبدو أنه يتعرف isnull وظيفة. لقد جربت أيضا بعض تلك المكافئة المعترف بها في قواعد البيانات الأخرى (NVL(), IFNULL() و COALESCE())، ولكن لا يبدو أن SQLite تعترف بأي منهم.

هل لدى أي شخص أي اقتراحات أو معرفة طريقة أفضل للقيام بذلك. لسوء الحظ، لا تحتوي قاعدة البيانات على قيم افتراضية لجميع الحقول. بالإضافة إلى ذلك، أحتاج إلى استخدام بعض LEFT JOIN البنود في بعض الحالات، حيث عاد بعض الحقول التي تم إرجاعها فارغة لأن سجل المطابقة في LEFT JOIN الجدول لن وجود.

هل كانت مفيدة؟

المحلول

IFNULL, ، انظر هنا: http://www.sqlite.org/lang_corefunc.html#ifnull.

لا توجد أقواس حول الوظيفة

نصائح أخرى

جرب هذا

ifnull(X,Y)  

على سبيل المثال

select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....

ال ifnull() تقوم الدالة بإرجاع نسخة من أول حجة غير فارغة، أو NULL إذا كانت كلا الوسيطات فارغة. Ifnull() يجب أن يكون لديك الحجج 2 بالضبط. ال ifnull() وظيفة تعادل coalesce() مع اثنين من الحجج.

إذا لم يكن هناك ISNULL() الطريقة، يمكنك استخدام هذا التعبير بدلا من ذلك:

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

هذا يعمل كما هو ISNULL(fieldname, 0).

يستخدم IS NULL أو IS NOT NULL في أي مكان بدلا من طريقة ISNULL ():

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

بالنسبة إلى ما يعادل NVL () و ISNULL () استخدام:

IFNULL(column, altValue)

column : العمود الذي تقوم بتقييمه.

altValue : القيمة التي تريد العودة إذا كانت "العمود" لاغية.

مثال:

SELECT IFNULL(middle_name, 'N/A') FROM person;

* ملاحظة: تعمل وظيفة CoalesCe () نفسها كما تفعل لقواعد بيانات أخرى.

مصادر:

يمكنك بسهولة تحديد هذه الوظيفة واستخدامها بعد ذلك:

ifnull <- function(x,y) {
  if(is.na(x)==TRUE) 
    return (y)
  else 
    return (x);
}

أو نفس النسخة المختصرة:

ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top