أكثر

التعامل مع القيم الفارغة في وضع العلامات؟

التعامل مع القيم الفارغة في وضع العلامات؟


في QGIS (2.10.1 على جهاز Mac) ، أحاول عمل بعض الملصقات متعددة الأسطر على خريطة لدي بها مجموعة من الأشجار. في جدول السمات ، لدي أعمدة بالاسم العلمي اللاتيني ، والاسم الإنجليزي (إن وجد) ، والسنة التي زرعت فيها الشجرة ، إلخ.

أقوم بتسمية الأشجار في خريطتي بتعبير مثل هذا:

genus_species + ' n' + case عندما لا تكون "english_species" خالية ، ثم "english_species" + ' n' end + to_string ("planted_year")

يعمل هذا بشكل جيد مع الصفوف التي لا يكون فيها النوع_الإنجليزي فارغًا ، ولكن كلما كان لدي صف بدون اسم إنجليزي ، يبدو أن التعبير بأكمله متقطع ولا تتم طباعة أي شيء ، ولا حتى الاسم العلمي أو العام (الذي يوجد دائمًا).

لقد حاولت إضافة

عندما يكون "النوع_الإنجليزي" فارغًا ، فإن "

لكن هذا لا يعمل أيضًا. ينقسم التعبير فقط للصفوف بدون قيمة في الحقل english_species.


لذا فإن الطريقة التي يتعامل بها QGIS مع NULL عند ضم السلاسل هي أنه سيحول النتيجة إلى NULL إذا كان أي جزء NULL (نعم ، أعلم أنه قيد المناقشة حول ما إذا كان ينبغي أم لا)

إليك كيفية التعامل مع ذلك باستخدام ملفconcatوظيفة:

concat ("genus_species"، ' n'، "english_species"، ' n'، to_string ("planted_year")

الconcatستحول الدالة NULL إلى سلسلة فارغة وتنضم على أي حال.


يجب استخدام سلسلة السلسلة بدلاً من الجمع (الرمز ||). يجب أن تبدو أكثر مثل هذا:

CASE WHEN "english_species" فارغ ثم "genus_species" || ' n' || to_string ("planted_year") ELSE "genus_species" || ' n' || "english_species" || ' n' || to_string ("planted_year") END

التحديث في 2.10 ليس هناك حاجة لاستخدام || بالنسبة إلى السلاسل بعد الآن ، فالأمر كله يتعلق بالحاجة إلى استخدام ELSE ، وإلا فإن التعبير غير صالح لأنك ستنتهي بـ + + إذا لم يكن الأمر كذلك. إذن خيار آخر ممكن:

"genus_species" + ' n' + CASE WHEN "english_species" IS NOT NULL THEN "english_species" + ' n' ELSE "END + to_string (" planted_year ")

وهو في حالة أخرى يجعل + "+ وعلى الرغم من صالح.