SQLite مكافئ ISNULL ()، NVL ()، IFNULL () أو Coalsce ()
سؤال
أرغب في تجنب وجود العديد من الشيكات مثل ما يلي في التعليمات البرمجية الخاصة بي:
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 () نفسها كما تفعل لقواعد بيانات أخرى.
مصادر:
- coalesce () وظيفة (W3Schools)
- SQL كما يفهمها SQLite (موقع SQLite)
يمكنك بسهولة تحديد هذه الوظيفة واستخدامها بعد ذلك:
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);}