CAST DECIMAL to INT


81

मैं यह करने की कोशिश कर रहा हूँ:

SELECT CAST(columnName AS INT), moreColumns, etc
FROM myTable
WHERE ...

मैंने यहां सहायता FAQ पर ध्यान दिया है: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html , यह कहता है कि मैं इसे पसंद कर सकता हूं CAST(val AS TYPE), लेकिन यह काम नहीं कर रहा है।

दशमलव को इंट में बदलने की कोशिश कर रहा है, वास्तविक मूल्य 223.00 है और मुझे 223 चाहिए


कास्टिंग की चेतावनी है क्योंकि आप एक स्ट्रिंग की आपूर्ति कर रहे हैं, क्या आप इसकी पुष्टि कर सकते हैं?
अंजुल

इसके साथ ही मारिया डीबी भी काम कर रही है
नियाति

जवाबों:


127

आप इस तरह FLOOR फ़ंक्शन आज़मा सकते हैं :

SELECT FLOOR(columnName), moreColumns, etc 
FROM myTable 
WHERE ... 

आप FORMAT फ़ंक्शन को भी आज़मा सकते हैं , बशर्ते आपको पता हो कि दशमलव स्थानों को छोड़ा जा सकता है:

SELECT FORMAT(columnName,0), moreColumns, etc 
FROM myTable 
WHERE ... 

आप दो कार्यों को जोड़ सकते हैं

SELECT FORMAT(FLOOR(columnName),0), moreColumns, etc 
FROM myTable 
WHERE ... 

2
आपको एहसास होता है कि आपको अपने SQL कोड में फ़ॉर्मेटिंग के साथ व्यवहार नहीं करना चाहिए?
फ्रेडली

अच्छा काम, १। प्रारूप मेरी स्थिति के लिए ठीक काम करता है, लेकिन मैं अभी भी सोच रहा हूं कि क्या कोई इसे CAST के साथ कर सकता है
Drahcir

@TomMedley: हाँ अगर मैं PHP aswell का उपयोग कर रहा होता, तो नहीं होता, लेकिन यह सिर्फ कुछ ट्रिगर और कार्यों के लिए है
Drahcir

2
@TomMedley मैं अधिक बारीक होगा: दृश्य बनाते समय SQL क्वेरी में स्वरूपण काम में आता है।
VH-NZZ

1
यह संख्या में हजारों विभाजकों के रूप में अल्पविराम जोड़ता है।
जनवरी 37paček

22

में एक और अधिक अनुकूलित तरीका है इस काम के लिए*:

SELECT columnName DIV 1 AS columnName, moreColumns, etc
FROM myTable
WHERE ...

DIV 1 का उपयोग करना FLOOR पर एक बहुत बड़ी गति सुधार है , न कि FORMAT जैसे स्ट्रिंग आधारित कार्यों का उल्लेख करना

mysql> SELECT BENCHMARK(10000000,1234567 DIV 7) ;
+-----------------------------------+
| BENCHMARK(10000000,1234567 DIV 7) |
+-----------------------------------+
|                                 0 |
+-----------------------------------+
1 row in set (0.83 sec)

mysql> SELECT BENCHMARK(10000000,1234567 / 7) ;
+---------------------------------+
| BENCHMARK(10000000,1234567 / 7) |
+---------------------------------+
|                               0 |
+---------------------------------+
1 row in set (7.26 sec)

mysql> SELECT BENCHMARK(10000000,FLOOR(1234567 / 7)) ;
+----------------------------------------+
| BENCHMARK(10000000,FLOOR(1234567 / 7)) |
+----------------------------------------+
|                                      0 |
+----------------------------------------+
1 row in set (8.80 sec)

(*) नोट: जैसा कि Grbts द्वारा बताया गया है, गैर-अहस्ताक्षरित / सकारात्मक मूल्यों के साथ उपयोग किए जाने पर DIV 1 के व्यवहार से अवगत रहें।


21

आपके द्वारा जुड़े लेख से:

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

BINARY [(N)]

CHAR [(एन)]

दिनांक

दिनांक और समय

DECIMAL [(M [, D])]

हस्ताक्षरित [INTEGER]

समय

UNSIGNED [INTEGER]

SIGNEDइसके बजाय प्रयास करेंINT


धन्यवाद, लेकिन मुझे अब एक और त्रुटि मिली है: त्रुटि कोड 1292, SQL राज्य 22001: डेटा ट्रंकेशन: गलत
इंट्रैक्टर इंटीग्रेटेड


10

मंजिल () और DIV के बीच एक महत्वपूर्ण अंतर है। नकारात्मक संख्याओं के लिए, वे अलग तरह से व्यवहार करते हैं। DIV 1 पूर्णांक भाग देता है (जैसा कि हस्ताक्षर किया जाता है), जबकि फर्श (x) "x से अधिक नहीं (मैनुअल से) सबसे बड़ा पूर्णांक मान देता है।" तो: -2 में फर्श (-1.1) का चयन करें , जबकि -1 में 1.1 div 1 परिणाम का चयन करें


10

CAST () फ़ंक्शन MySQL में "आधिकारिक" डेटा प्रकार "INT" का समर्थन नहीं करता है, यह समर्थित प्रकारों की सूची में नहीं है । MySQL के साथ, "SIGNED" (या "UNSIGNED") का उपयोग इसके बजाय किया जा सकता है:

CAST(columnName AS SIGNED)

हालाँकि, यह MySQL-specific (मानकीकृत नहीं) लगता है, इसलिए यह अन्य डेटाबेस के साथ काम नहीं कर सकता है। कम से कम इस दस्तावेज़ (द्वितीय अनौपचारिक समीक्षा ड्राफ्ट) आईएसओ / आईईसी 9075: 1992, डेटाबेस अनुभाग में "हस्ताक्षरित" / "UNSIGNED" को सूचीबद्ध नहीं करता है 4.4 Numbers

लेकिन DECIMAL दोनों मानकीकृत और MySQL द्वारा समर्थित है, इसलिए निम्नलिखित MySQL (परीक्षण) और अन्य डेटाबेस के लिए काम करना चाहिए:

CAST(columnName AS DECIMAL(0))

MySQL डॉक्स के अनुसार :

यदि स्केल 0 है, तो DECIMAL मानों में कोई दशमलव बिंदु या अंश नहीं होता है।


3

यदि आपके नंबर हमेशा हमेशा .00 के साथ समाप्त नहीं होते हैं तो भी ROUND () है। ROUND (20.6) 21 देगा, और ROUND (20.4) 20 देगा।


3

आपकी यह कोशिश कर सकते हैं:

SELECT columnName1, CAST(columnName2 AS  SIGNED ) FROM tableName 

1

प्रयत्न cast (columnName as unsigned)

अहस्ताक्षरित केवल सकारात्मक मूल्य है

यदि आप नकारात्मक मूल्य को शामिल करना चाहते हैं, तो cast (columnName as signed),
साइन (नकारात्मक शामिल) और अहस्ताक्षरित (साइन के दो बार आकार, लेकिन कम-नकारात्मक) के बीच का अंतर


1

1 प्रतिशत: कोई स्थान b / w CAST और (अभिव्यक्ति) नहीं। यानी, CAST (स्तंभ नाम के रूप में)।

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