2009-11-09 14 views
7

मैं क्या इस एसक्यूएल बयान का मतलब है के रूप में विस्मित कर रहा हूँ:SQL कथन में "सेट + 0" क्या करता है?

SELECT exhibitor_categories+0 from exhibitor_registry 

क्या exhibitor_categories + 0 है? यह लौटाई गई प्रत्येक पंक्ति के लिए एक संख्या देता है। आपके समय के लिए

set('contemporary', 'classical impression/transitional', 'outdoor', 'home accessories') 

धन्यवाद :)

+0

+1 अच्छा सवाल है। मुझे आश्चर्य है कि SQL सर्वर 200/2005 के बराबर है या नहीं? उदाहरण के लिए –

उत्तर

7

यह implicity एक INTEGER को निर्धारित मूल्य धर्मान्तरित:

exhibitor_categories परिभाषित किया गया है के रूप में।

एक समूह को एक बिटमैप के रूप में व्यवहार किया जाता है, इसलिए पहले मूल्य सेट थोड़ा 0, दूसरा मूल्य सेट थोड़ा 1 आदि

mysql> CREATE TABLE exhibitor_registry(exhibitor_categories set('contemporary', 
'classical impression/transitional', 'outdoor', 'home accessories') NOT NULL); 

Query OK, 0 rows affected (0.08 sec) 

mysql> INSERT 
    -> INTO exhibitor_registry 
    -> VALUES ('contemporary,classical impression/transitional,outdoor'); 
Query OK, 1 row affected (0.03 sec) 

mysql> SELECT exhibitor_categories 
    -> FROM exhibitor_registry; 
+----------------------------------------------------------+ 
| exhibitor_categories          | 
+----------------------------------------------------------+ 
| contemporary,classical impression/transitional,outdoor | 
+----------------------------------------------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT exhibitor_categories + 0 
    -> FROM exhibitor_registry; 
+--------------------------+ 
| exhibitor_categories + 0 | 
+--------------------------+ 
|      7 | 
+--------------------------+ 
1 row in set (0.00 sec) 
+0

, "समकालीन" जैसे मूल्य को पूर्णांक में परिवर्तित किया गया है? या, चूंकि यह एक सेट है, "समकालीन, आउटडोर" एक पूर्णांक में कैसे परिवर्तित किया जाता है? क्या आपके पास एक सेट मान को पूर्णांक में परिवर्तित करने के उद्देश्य के रूप में कोई अंतर्दृष्टि है? – Obay

+0

वाह! बहुत उपयोगी! हालांकि यह 7 कैसे बन गया? यह 6 नहीं होगा क्योंकि 1 + 2 + 3 = 6? – Obay

+1

'ओबेय': बिटमैप दो की शक्तियों को जोड़ता है ताकि वे मिश्रित न हों। यह '2^0' + 2^1 +' 2^2 = 1 + 2 + 4 = 7' है। '6' के साथ, आप '1 + 2 + 3' और' 2 + 4' के बीच अंतर करने में सक्षम नहीं होंगे। – Quassnoi

4

पूर्ण पतला के लिए http://dev.mysql.com/doc/refman/5.0/en/set.html चेक बाहर है, लेकिन मूल रूप से इस तरह एक क्षेत्र है एक 'सेट' के रूप में जाना जाता है - इसमें संभावित मूल्यों की एक सूची है, जो केवल उनमें से एक या अधिक हो सकती है। मान को एक संख्या के रूप में संग्रहीत किया जाता है ... जिसका अर्थ है कि exhibitor_categories वास्तव में मान 4 को संग्रहीत कर रहा है जब कोई 'बाहरी' मान को सेट करता है, क्योंकि यह तीसरा बिट - '0100' सेट करता है। जब आप बाद में डेटाबेस से मूल्य वापस प्राप्त करते हैं, तो MySQL स्वचालित रूप से आपके लिए '0100' को 'आउटडोर' में बदल देता है।

लेकिन, क्वेरी में +0 जोड़कर, आप परिणाम को एक संख्या में रहने के लिए मजबूर करते हैं, इसलिए अगर आपको इस मामले में पंक्ति का मूल्य 'आउटडोर' पर सेट किया गया तो आपको वास्तव में '0100' संख्या मान मिलेगा।

enum पाने और मिश्रित सेट करने के लिए माफ़ी।

क्यों, आप पूछ सकते हैं, क्या यह 'en' कहने के बजाय '0100' मान को सेट कर रहा है, जैसे कि enum में? चूंकि एक सेट में कई मान हो सकते हैं - यदि मान 'समकालीन' (0001) और 'आउटडोर' (0100) का चयन किया गया था, तो यह '0101' < स्टोर करेगा - पहला और तीसरा बिट सेट करेगा, जिसे '5' के रूप में वापस किया जाएगा यदि आप +0 कोड का उपयोग करते हैं।

+1

यह एक 'सेट' (बिटमैप) है, न कि 'enum'। 'आउटडोर' संग्रहित करने से संख्यात्मक मान '4' पर सेट हो जाएगा। – Quassnoi

+0

क्वास्नोई, क्यों 4? यह 3 नहीं होगा क्योंकि यह तीसरा तत्व घोषित किया गया है? – Obay

संबंधित मुद्दे