2012-08-26 14 views
175

मेरे वर्तमान डाटाकास्ट पूर्णांक पर - के लिए</p> <pre><code>SELECT PROD_CODE FROM `PRODUCT` </code></pre> <p>MySQL

PROD_CODE 
2 
5 
7 
8 
22 
10 
9 
11 

मैं सभी चार प्रश्नों और कोई भी काम करने की कोशिश की है। (Ref) इस तरह के नीचे के रूप में

SELECT CAST(PROD_CODE) AS INT FROM PRODUCT; 

SELECT CAST(PROD_CODE AS INT) FROM PRODUCT; 

SELECT CAST(PROD_CODE) AS INTEGER FROM PRODUCT; 

SELECT CAST(PROD_CODE AS INTEGER) FROM PRODUCT; 

सभी फेंक सिंटैक्स त्रुटि:

आप अपने एसक्यूएल वाक्य रचना में एक त्रुटि है, का उपयोग करने के लिए सही वाक्यविन्यास के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल को जांचें ') लाइन 1

पर आपके पास आपके SQL वाक्यविन्यास में कोई त्रुटि है; मैनुअल कि लाइन 1

पर अपने MySQL सर्वर सही वाक्य रचना के पास का उपयोग करने के लिए 'पूर्णांक उत्पाद सीमा 0, 30 से)' संस्करण से मेल खाती है क्या सही MySQL में पूर्णांक varchar कास्ट करने के लिए वाक्य रचना है की जाँच ?

MySQL संस्करण: 5.5.16

+0

प्रत्येक प्रयास के लिए यह किस त्रुटि की रिपोर्ट करता है? आपके इनपुट क्या हैं? यदि परिणाम सेट में किसी भी रिकॉर्ड के लिए कास्ट विफल रहता है तो क्वेरी में विफल होने के लिए यह _supposed_ है।कम से कम, एसक्यूएल मानक कहता है, हालांकि MySQL मानक में सुरक्षा नियमों को तोड़ने के लिए कुख्यात है। और, रिकॉर्ड के लिए, दूसरे और चौथे सूचीबद्ध नमूने सही हैं। –

उत्तर

384

Cast Functions and Operators में वर्णित है:

परिणाम निम्न मानों में से एक हो सकता है के लिए के प्रकार:

  • BINARY[(N)]
  • CHAR[(N)]
  • DATE
  • DATETIME
  • DECIMAL[(M[,D])]
  • SIGNED [INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

इसलिए, आप का उपयोग करना चाहिए:

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT 
+4

बिना हस्ताक्षर किए काम कर रहा है। MySQL ने इंटीजर डेटाटाइप को बिना हस्ताक्षर किए कब से बदल दिया? – emaillenin

+12

@emaillenin: कास्टिंग के लिए डेटा प्रकार कॉलम के लिए समान नहीं हैं, क्योंकि डेटा की व्याख्या करने के तरीके के बारे में अतिरिक्त जानकारी आवश्यक है। क्या पूर्णांक हस्ताक्षरित हैं या नहीं। – eggyal

+8

इस जानकारी के लिए धन्यवाद। MySQL दस्तावेज मेरे लिए अराजक है इसलिए इससे बहुत मदद मिली। – Racky

24

varchar क्षेत्रों कास्टिंग के लिए/संख्या स्वरूप को मान थोड़ा हैक किया जा सकता है: Laravel का उपयोग कर

SELECT (`PROD_CODE` * 1) AS `PROD_CODE` FROM PRODUCT` 
+6

जब कोई सीधा होता है तो कभी भी ऐसे "हैक" का उपयोग क्यों नहीं करेगा , दस्तावेज, समर्थित और अनुशंसित समाधान? – eggyal

+8

@eggyal ** टीएल; डीआर: ** "हैक" जिसका आप उल्लेख कर रहे हैं, एक सीधा, दस्तावेज और अनुशंसित समाधान है। - - - - - - - - - - - - - * * लांग वर्जन **: [मैनुअल] से (http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html): 'एक स्ट्रिंग को किसी संख्या में डालने के लिए, आपको आमतौर पर आवश्यकता होती है संख्यात्मक संदर्भ में स्ट्रिंग मान का उपयोग करने के अलावा कुछ भी नहीं 'हालांकि मैं '* 1' के बजाय' + 0' का उपयोग करता हूं, क्योंकि अतिरिक्त तेज़ है। – Mindwin

+0

यह "अनुशंसित समाधान" क्यों MySQL अपाचे और PHP के साथ अच्छी तरह से चला जाता है। –

-1

, तो आप उपयोग कर सकते हैं:

YourModel::select(DB::raw('CAST(PROD_CODE AS UNSIGNED)'))->... // under select 

या आप एक where में इसका इस्तेमाल करना चाहते हैं तो

->whereRaw('CAST(reference_number AS UNSIGNED) = '.intval($value))-> 
// well, you can ignore the intval(), but it makes sense if the value you are using may be having, for example, preceding zeros e.g. 0003, 
संबंधित मुद्दे