2012-06-07 10 views
6

यह प्रश्न मेरे पिछले post से आता है।ओरेकल में, '=' 'झूठी क्यों है?

select * from TPM_USER where 1 = 1 

रिटर्न तालिका में प्रत्येक पंक्ति:

मैं क्यों जानने के लिए उत्सुक हूँ:

select * from TPM_USER where '' = '' 

रिटर्न पंक्तियों शून्य है, लेकिन। क्या यह प्रति एसक्यूएल मानक है, या यह ओरेकल विशिष्ट है?

ओरेकल SQL Fiddle

निम्नलिखित काम के रूप में उम्मीद:

PostgreSQL SQL Fiddle

एसक्यूएल सर्वर SQL Fiddle

mySQL SQL Fiddle

उत्तर

6

ओरेकल में, एक empty string equates to NULL। आप don't use = for NULL values

+0

नहीं, जिसके परिणामस्वरूप 'ORA-00908: अनुपलब्ध कीवर्ड' –

+0

धन्यवाद। मेरी बाकी की टिप्पणी अभी भी सच है। – gpojd

+0

धन्यवाद, मुझसे + 1'। आपके लिंक किए गए प्रश्न में जस्टिन गुफा का जवाब इस पूरी तरह से इतिहास को बताता है। –

7

ओरेकल खाली स्ट्रिंग और NULL के बीच अंतर नहीं करता है।

यही कारण है कि अनुशंसित स्ट्रिंग डेटाटाइप VARCHAR2 है और VARCHAR नहीं है: बाद वाला यह भेद करना चाहता है लेकिन वर्तमान में नहीं।

त्रिसंयोजक तर्क जो SQL उपयोग करता है, NULL = NULL (जो Oracle में '' = '' के पर्याय बन गया है) NULL (नहीं FALSE लेकिन NULL) का आकलन करती है और इसलिए में WHERE खंड द्वारा फ़िल्टर किया जाता है।

+0

+1 अभिव्यक्ति '' = '' नल का मूल्यांकन गलत नहीं है। – spencer7593