कैसे एक MySQL का चयन खंड में एक बूलियन के लिए एक पूर्णांक बनाने के लिए?


29

मैं यहाँ नया हूँ इसलिए मुझ पर दया करो। मेरा निम्नलिखित परिदृश्य है:

मेरे पास कई टेबल हैं, जो सादगी के लिए, मेरे MySQL डेटाबेस में एक दृश्य में दर्शाए गए हैं। मेरी समस्या यह है कि मुझे इस दृश्य में एक मूल्य की आवश्यकता है जो यह दर्शाता है कि यह एक प्रकार की घटना है या कोई अन्य (एक साधारण बूलियन), जिसे मैंने हासिल करने की कोशिश की:

`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement` AS `IsStopingEvent`

परिणाम को इंट के रूप में दर्शाया जाता है, और इसलिए एंटिटी फ्रेमवर्क द्वारा पढ़ा जाता है। समस्या यह है कि मुझे वास्तव में एक बूलियन रिटर्न मूल्य की आवश्यकता है, जिसे मैंने प्राप्त करने की कोशिश की:

CAST((`gu`.`StoppingUnitEventME` = `ese`.`MonitoringElement`) as boolean) AS `IsStopingEvent` 

इसके परिणामस्वरूप त्रुटि हुई, वह जो MySQL कार्यक्षेत्र में मुझे प्रदर्शित नहीं की गई है (मैं केवल उस कष्टप्रद "आपको एक त्रुटि ...") प्राप्त होता है।

क्या तुम लोग मेरी मदद कर सकते हो?

मेरे आवेदन में इसे हल करने की कोशिश की गई है, लेकिन मैं वास्तव में इसे डेटाबेस में हल करता हूं, क्योंकि यह बाद में अन्य सॉफ़्टवेयर द्वारा उपयोग किया जाएगा।

जवाबों:


26

IF फ़ंक्शन का उपयोग करके देखें :

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, TRUE, FALSE) 
FROM ...

या

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 1, 0) 
FROM ...

IF फ़ंक्शन के बिना भी, चल रहा है

mysql> select ('rolando' = 'rolando') str_compare;
+-------------+
| str_compare |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

mysql>

mysql क्लाइंट का उपयोग करके 0 या 1 प्राप्त करें

समस्या यह है: CAST () और CONVERT () केवल निम्न प्रकारों को स्वीकार और वापस कर सकते हैं :

  • बायनरी [(एन)]
  • CHAR [(एन)]
  • तारीख
  • दिनांक समय
  • दशमलव [(एम [, डी])]
  • हस्ताक्षरित [INTEGER]
  • पहर
  • UNSIGNED [INTEGER]

चूंकि BOOLEAN इस सूची में नहीं है, इसलिए इसे CAST या CONVERT द्वारा कभी नहीं लौटाया जा सकता

आप स्ट्रिंग उत्पन्न करने के लिए IF फ़ंक्शन का उपयोग कर सकते हैं

SELECT IF(`gu`.`StoppingUnitEventME`=`ese`.`MonitoringElement`, 'TRUE', 'FALSE') 
FROM ...

1
एक बूलियन के लिए एक उपनाम है tinyint। किसी भी परिस्थिति में IFवापसी नहीं होती है, tinyintइसलिए मैं यह नहीं देख सकता कि यह उत्तर कैसे सही या स्वीकृत है।
इवान कैरोल

@EvanCarroll मेरा जवाब CAST और CONVERT को पूरी तरह से बायपास करने के लिए है। IF फ़ंक्शन का उपयोग करने से उसका फ्रेमवर्क नहीं होगा, जो BOINEAN को INT (4-बाइट) के बजाय TINYINT (1-बाइट) के रूप में पहचानता है। इस मामले में, आपने BOOLEAN मानों के साथ काम नहीं करने के लिए रूपरेखा को दोषी ठहराया है।
रोलैंडमाइसीडीडीबीए

10

आप इसे बहुत सरल तरीके से कर सकते हैं, बिना अनावश्यक उपयोग के () कथन:

... `YourField` IS NOT NULL AS `YourField` ...

ईमानदारी से यह सबसे आसान तरीका है। और मेरे केस के लिए काम करता है। धन्यवाद!
माइक हैरिसन

4

आप क्लासिक बूलियन जबरदस्ती भी आज़मा सकते हैं:

चयन नहीं (जो भी);

इसके बारे में अच्छी बात यह है कि यह स्वाभाविक रूप से NULLs को संरक्षित करता है, जबकि यहाँ अधिकांश उत्तर नहीं हैं।

यदि आप NAL को FALSE करना चाहते हैं, तो करें

IFNULL का चयन करें (नहीं (जो भी नहीं), FALSE);


1
मुझे आश्चर्य है, यह एक पूर्णांक को बूलियन में कैसे परिवर्तित करता है?
ypercube y

2

आप "CASE" का भी उपयोग कर सकते हैं:

SELECT CASE WHEN yourField=testValue THEN 'TRUE' ELSE 'FALSE' END as boolFieldName


आपको इसे बूलियन के रूप में डालना चाहिए, अगर यह एक चर क्षेत्र नहीं है।
मैकनेट्स

कभी-कभी आपकी क्वेरी का उपभोक्ता एक चरित्र चाहता है, हालांकि
एरिक विल्सन

2

वर्तमान में यह असंभव है।

  • MySQL में एक वास्तविक BOOLEANप्रकार नहीं है , (या एक वास्तविक सरणी प्रकार .. या एक वास्तविक JSON प्रकार)। इसके लिए एक उपनाम है TINYINT
  • कोई भी शर्त पूर्णांक देता है। यह सीपीयू के लिए सबसे तेज डेटाटाइप है, और संभवतः यह कार्यान्वयन विस्तार यहां परिलक्षित होता है। उदाहरण के लिए, 'true' IS TRUEऔर 1=1दोनों 1एक के रूप में वापस आते हैं int
  • CAST एक TINYINTप्रारूप प्रदान नहीं करता है ।

जहां तक ​​मैं आपको बता सकता हूं कि आप न तो एक प्रकार का डिमोट कर सकते हैं, न ही ए में टिंटिंट का उत्पादन कर सकते हैं SELECT

मैं अत्यधिक PostgreSQL की ओर पलायन का सुझाव दूंगा। यह बहुत कम भयानक है ... और मुक्ति।


2

Mysql फ़ंक्शन CAST_TO_BIT का उपयोग करें

उदाहरण:

SELECT CAST_TO_BIT(1);

Mysql: चयन CAST_TO_BIT (0) ; -> jdbc ड्राइवर -> Java: बूलियन गलत ;

Mysql: चयन CAST_TO_BIT (1) ; -> jdbc ड्राइवर -> जावा: बूलियन सच ;

Mysql: चयन CAST_TO_BIT (शून्य) ; -> jdbc ड्राइवर -> जावा: NULL ;

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