2008-09-15 18 views
14

वहाँ डीबी 2 के लिए isnull कार्य करने के लिए एक performant बराबर है?डीबी 2 एसक्यूएल में IsNull फ़ंक्शन?

कल्पना कीजिए हमारे उत्पादों में से कुछ आंतरिक हैं, इसलिए वे नाम नहीं हैं:

Select product.id, isnull(product.name, "Internal) 
From product 

वापस कर सकती है:

1 Socks 
2 Shoes 
3 Internal 
4 Pants 

उत्तर

2

मैं डीबी 2 से परिचित नहीं हूँ, लेकिन आप COALESCE की कोशिश की है ?

अर्थात्:


SELECT Product.ID, COALESCE(product.Name, "Internal") AS ProductName 
FROM Product 
0

COALESCE समारोह एक ही ISNULL समारोह नोट। आपको COALESCE फ़ंक्शन का उपयोग उसी डेटा प्रकार के कॉलम के साथ करना चाहिए जिसे आप चेक करते हैं।

0

मैं COALESCE समारोह आंशिक रूप से isnull के समान लगता है, लेकिन यह प्रयास करें।

क्यों आप आवेदन कार्यक्रमों के माध्यम से अशक्त हैंडलिंग कार्यों के लिए नहीं जाते हैं, यह बेहतर विकल्प है।

+0

COALESCE अलग है कि आप इसे पैरामीटर की एक चर संख्या को खिला सकते हैं और यह वैकल्पिक गैर डिफ़ॉल्ट के साथ पहले गैर-शून्य को वापस कर देगा। इसलिए यदि मेरे पास varA, varB और VarC है, जिनमें से कोई भी शून्य हो सकता है (कहें वे बाहरी जुड़ने में विभिन्न तालिकाओं से आते हैं) और यदि सब शून्य हैं तो मैं एक खाली स्ट्रिंग चाहता हूं, मैं कहता हूं घ उपयोग COALESCE (Vara, varB, varC, '') और उन्हें इस बात का पहले मिल अशक्त नहीं था, या एक खाली स्ट्रिंग अगर वे सब अशक्त हैं। IFNULL (टी-एसक्यूएल में ISNULL) एक सब कुछ या कुछ भी नहीं है। –

34

क्या इसके लायक, COALESCE समान है लेकिन

IFNULL(expr1, default) 

सटीक मिलान आप डीबी 2 में के लिए देख रहे है। जबकि IFNULL केवल अभिव्यक्ति और डिफ़ॉल्ट परमिट

COALESCE, कई तर्क, पहली गैर शून्य अभिव्यक्ति लौटने की अनुमति देता है।

इस प्रकार

SELECT product.ID, IFNULL(product.Name, "Internal") AS ProductName 
FROM Product 

आप देता है आप के साथ ही पिछले जवाब जो खोज रहे हैं, बस संपूर्णता के लिए जोड़ने।

+1

+1 IsNull बयान के लिए एक * सटीक * मैच देने के लिए। मैंने स्वीकार किए गए उत्तर को भी वोट दिया, लेकिन मैं इसके बजाय आपका उपयोग कर रहा हूं। धन्यवाद! – David

+2

यह विंडोज के लिए डीबी 2 9.7 एफपी 9ए में काम नहीं करता है। –

2
Select Product.ID, VALUE(product.Name, "Internal") AS ProductName from Product 
+0

एर, हाँ। हालांकि, ध्यान दें कि 'VALUE (...)' [COALESCE (...) '] के लिए समानार्थी है (http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic =% 2Fcom.ibm.db2.udb.admin.doc% 2Fdoc% 2Fr0000868.htm); ऑप्टिमाइज़र शायद आपके लिए कॉल को स्वैप कर रहा है।व्यक्तिगत रूप से, मैं जहां संभव हो गैर-एएनएसआई अर्थशास्त्र से बचने की सलाह देता हूं (यानी, इसके बजाय 'COALESCE (...)' का उपयोग करें)। –

+0

ओह! ठीक है ... मुझे मिल गया, धन्यवाद! – Jnn

1

डीबी 2 में एक समारोह एनवीएल (फ़ील्ड, शून्य अगर शून्य है) है।

उदाहरण:

चयन आईडी, NVL (नाम, "आंतरिक) नाम के रूप में, NVL (मूल्य, 0) यू.आर. के साथ उत्पाद से कीमत के रूप में;

0

आशा है कि यह किसी और के बाहर वहाँ

मदद कर सकता है
SELECT 
.... FROM XXX XX 
WHERE 
.... 
AND(
     param1 IS NULL 
     OR XX.param1 = param1 
     ) 
संबंधित मुद्दे