VARCHAR से INT - MySQL में कास्ट करें


267

मेरे वर्तमान डेटा के लिए

SELECT PROD_CODE FROM `PRODUCT`

है

PROD_CODE
2
5
7
8
22
10
9
11

मैंने सभी चार प्रश्नों की कोशिश की है और कोई भी काम नहीं किया है। ( संदर्भ )

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;

सभी सिंटैक्स त्रुटियां जैसे नीचे दी गई हैं:

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

आपके SQL सिंटैक्स में कोई त्रुटि है; लाइन 1 पर 'INTEGER) FROM PRODUCT LIMIT 0, 30' के पास उपयोग करने के लिए सही सिंटैक्स के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जाँच करें।

MySQL में पूर्णांक बनाने के लिए सही सिंटैक्स क्या है?

MySQL संस्करण: 5.5.16


प्रत्येक प्रयास के लिए यह किस त्रुटि की सूचना देता है? आपके इनपुट क्या हैं? यह है चाहिए क्वेरी विफल अगर डाली परिणाम सेट में किसी भी रिकार्ड के लिए विफल रहता है। कम से कम, कि sql मानक क्या कहता है, हालांकि MySql मानक में सुरक्षा नियमों को तोड़ने के लिए कुख्यात है। और, रिकॉर्ड के लिए, 2 और 4 वें सूचीबद्ध नमूने सही हैं।
जोएल कोएहॉर्न

जवाबों:


552

जैसा कि कास्ट फ़ंक्शंस और ऑपरेटर्स में वर्णित है :

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

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

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

SELECT CAST(PROD_CODE AS UNSIGNED) FROM PRODUCT

7
बिना काम के है। माईएसक्यूएल ने इंटेगर डेटाटाइप को कब से बदलकर अनसाइन किया?
लेनिन राज राजसेकरन

20
@ हेमिलिन: कास्टिंग के लिए डेटा प्रकार स्तंभों के लिए समान नहीं हैं, क्योंकि डेटा की व्याख्या करने के लिए अतिरिक्त जानकारी आवश्यक है जैसे कि पूर्णांक पर हस्ताक्षर किए गए हैं या नहीं।
१.३।

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

मैं CAST (num_col AS DOUBLE (10,2) के साथ समस्या कर रहा था .. बाद में मैंने इसे DECIMAL (10,2) में बदल दिया और इसने काम किया। त्ननक्स
नव बोगटे

ध्यान दें कि MariaDB पर यह ठीक CAST(PROD_CODE AS INT) काम करता है।
पॉल स्पीगल

56

वर्कशीट फ़ील्ड / मानों को संख्या स्वरूप में उपयोग करने के लिए बहुत कम हैक किया जा सकता है:

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

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

31
@eggyal TL; DR: जिस "हैक" का आप उल्लेख कर रहे हैं, वह एक सीधा, प्रलेखित और अनुशंसित समाधान है। - - - - - - - - - - - - - - लंबे संस्करण : मैनुअल से : To cast a string to a number, you normally need do nothing other than use the string value in numeric contextहालांकि मैं +0इसके *1अलावा का उपयोग करेंगे क्योंकि इसके अलावा तेजी से है।
माइंडविन

8
@ ब्रायनस्टीन ने स्वीकार किए गए उत्तर को स्पष्ट रूप से दिखाया है कि बेहतर शब्दार्थ के साथ एक समाधान मौजूद है, लेकिन कभी-कभी यह सिर्फ सुविधाजनक होता है कि एक आदिम मूल्य को एक और आदिम के लिए निहित किया जाता है, खासकर जब तार और संख्यात्मक प्रकार को मिलाते हैं। इसलिए इस सुविधा के अस्तित्व के लिए बेतरतीब ढंग से प्रोग्रामिंग भाषाओं को बल्कि अनुचित लगता है।
B12Toaster

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