ISNULL () के लिए PostgreSQL के बराबर क्या है


254

MS SQL- सर्वर में, मैं कर सकता हूँ:

SELECT ISNULL(Field,'Empty') from Table

लेकिन PostgreSQL में मुझे एक सिंटैक्स त्रुटि मिलती है। मैं ISNULL()कार्यक्षमता का अनुकरण कैसे करूं ?


1
नहीं, आप MSSQL में ऐसा नहीं कर सकते। वह कोड संकलित नहीं करेगा। ISNULLदो तर्क लेता है और दूसरा लौटाता है पहला है null, अन्यथा पहला।
GSerg

@ सर्जक, आप सही कह रहे हैं। तय हो गया कि
बायरन व्हिटलॉक

Gserg और बायरन हाँ आप यहाँ उदाहरण मेरा पीसी का चयन करें isnull (a.FechaEntregada, '') से परीक्षण के रूप में dbo.Amonestacion से देख सकते हैं msdn.microsoft.com/en-us/library/ms184325.aspx
जुआन

जवाबों:


452
SELECT CASE WHEN field IS NULL THEN 'Empty' ELSE field END AS field_alias

या अधिक मुहावरेदार:

SELECT coalesce(field, 'Empty') AS field_alias

49
के लिए +1 coalesce। (PS आप MS SQL सर्वर में भी ऐसा कर सकते हैं।)
एलिसन आर।

2
हालांकि IS NULL का उपयोग करने के अन्य मामले हैं, इसलिए दोनों को जानना अच्छा है।
काइल बट्ट

30
मुझे लगता है कि यह ध्यान देने योग्य है कि यह coalesceSQL मानक में है, isnullएमएस-विशिष्ट फ़ंक्शन के साथ जो अनिवार्य रूप से coalesceकेवल दो मापदंडों के साथ है।
GSerg

4
Coalesce () भी ठीक प्रकार से पदोन्नति को संभालता है (जैसे UNION SELECT करता है), जबकि IsNull () नहीं करता है।
एरिक

2
यह इंगित करने योग्य है कि ISNULL और COALESCE समान नहीं हैं। IsNull परिणाम-प्रकार को तर्क 1 के प्रकार के लिए बाध्य करता है, जबकि कोलेस प्रत्येक तर्क के लिए संबंधित प्रकारों का उपयोग करता है। यदि आप बस खोज-और-बदल के isnull को तराजू के साथ रखते हैं, तो आप संभावित रूप से बहुत सारी त्रुटियां प्राप्त कर सकते हैं ...
स्टीफन स्टेगर

75

COALESCE()इसके बजाय उपयोग करें :

SELECT COALESCE(Field,'Empty') from Table;

यह बहुत ISNULLअधिक कार्य करता है, हालांकि अधिक कार्यक्षमता प्रदान करता है। कोलेससी सूची में पहला गैर अशक्त मान लौटाएगा। इस प्रकार:

SELECT COALESCE(null, null, 5); 

5 रिटर्न, जबकि

SELECT COALESCE(null, 2, 5);

प्रतिफल २

कोलेससे बड़ी संख्या में तर्क देंगे। अधिकतम कोई दस्तावेज नहीं है। मैंने इसे 100 तर्कों का परीक्षण किया और यह सफल रहा। यह विशाल परिस्थितियों के लिए बहुत कुछ होना चाहिए।


24

मैं ISNULL () कार्यक्षमता का अनुकरण कैसे करूं?

SELECT (Field IS NULL) FROM ...

4
यह isnull की सटीक कार्यक्षमता का अनुकरण करता है, यह सुनिश्चित नहीं है कि इसे क्यों
उतारा गया है

सवाल के लिए सबसे अच्छा जवाब, ज़ाहिर है। यह अभिव्यक्ति ISNULL () के पूर्ण समकक्ष है। COALESCE () यह जानने के लिए बहुत स्मार्ट और दिलचस्प है लेकिन यह बंद होने के दौरान एक ISNULL () प्रदर्शन नहीं कर सकता है।
स्कॉलर 29

16
मुझे नहीं पता कि ISNULLआप टिप्पणीकार क्या उल्लेख कर रहे हैं, लेकिन field IS NULLएक बूलियन मूल्य देता है, जबकि ISNULLSQL सर्वर में काम करता है COALESCE: यह गैर- NULLमानों में से एक देता है। यह उत्तर बहुत गलत है। दस्तावेज़ देखें: ISNULL
jpmc26

10
मुझे संदेह है कि ये टिप्पणीकार MySQL उपयोगकर्ता हैं जिन्हें इस बात का एहसास नहीं था कि "MS SQL सर्वर में ..." के साथ शुरू होता है, "MySQL में ISNULL () फ़ंक्शन होता है जो एकल तर्क लेता है और 0 या 1. T-SQL का संस्करण लेता है दो तर्क और व्यवहार व्यवहार या Oracle के NVL की तरह।
डेविड नोहा

1
greatvovan, यह मूल पोस्टर का इरादा था या नहीं, मेरा मानना ​​है कि लोग जो चाहते हैं, वह उत्तर है कि "मैं कैसे जांचता हूं कि क्या क्षेत्र शून्य है", जरूरी नहीं कि "वास्तव में ISNULL फ़ंक्शन कैसे काम करता है"। मेरे साथ यही हुआ था और यह जवाब उसके लिए एकदम सही है।
फ्रीमैन हेलमथ

15

प्रयत्न:

SELECT COALESCE(NULLIF(field, ''), another_field) FROM table_name

3
यह अच्छा है क्योंकि यह उस मामले को कवर करता है जब कोई पाठ फ़ील्ड शून्य नहीं है, लेकिन 'खाली' भी है।
सोलिया

-9

निम्नलिखित फ़ंक्शन बनाएँ

CREATE OR REPLACE FUNCTION isnull(text, text) RETURNS text AS 'SELECT (CASE (SELECT $1 "
    "is null) WHEN true THEN $2 ELSE $1 END) AS RESULT' LANGUAGE 'sql'

और यह काम करेगा।

आप विभिन्न पैरामीटर प्रकारों के साथ अलग-अलग संस्करण बना सकते हैं।


28
कृपया, कोई भी ऐसा नहीं करता है। आपके डीबीए आपसे नफरत नहीं करता है, इसके बजाय कोलेसस () का उपयोग करें।
जॉर्डन

1
postgres कृपया isnull जोड़ें ताकि कोई किसी से नफरत न करे।
एरिक ट्विलेगर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.