MySQL

2009-08-19 5 views
21

मैं इस तरह के रूप में पहचान करने और एक मूल्य पर आधारित एक मेज, पर एक SELECT मैच करने के लिए कोशिश कर रहा हूँ में एक नाव का चयन:MySQL

SELECT * FROM `table` WHERE `ident`='ident23' AND `price`='101.31'; 

ऊपर रिटर्न, पंक्तियों शून्य जबकि अगर आप price='101.31' बिट को दूर यह सही पंक्ति देता है।

कर एक ...

SELECT * FROM `table`; 

ऊपर के रूप में एक ही पंक्ति रिटर्न और काफी स्पष्ट रूप से कहा गया है कि price='101.31'। फिर भी इसे मैच करने में विफल रहता है। = से <= बदलना यह काम करता है - लेकिन यह बिल्कुल एक समाधान नहीं है।

क्या ऑपरेशन करने से पहले MySQL फ़्लोट को 2 अंकों तक कास्टिंग करने का कोई तरीका है, इस प्रकार ऊपर SELECT कार्य (या कुछ अन्य समाधान) बना रहा है?

धन्यवाद!

उत्तर

35

एक दशमलव में कास्ट करना मेरे लिए काम किया:

SELECT * FROM table WHERE CAST(price AS DECIMAL) = CAST(101.31 AS DECIMAL); 

हालांकि, अगर आप सिर्फ पहली जगह में price स्तंभ एक दशमलव बनाने पर विचार कर सकते हैं। मौद्रिक मूल्यों से निपटने के दौरान डेसिमल को आमतौर पर उपयोग करने का सबसे अच्छा प्रकार माना जाता है।

+4

नोट: 'DECIMAL (एम, डी) 'का उपयोग करें। 'CAST (101.31 AS DECIMAL) = 101' –

-1

शायद इन पंक्तियों के साथ कुछ:

SELECT * FROM table WHERE ident='ident23' AND ABS(price - 101.31) < .01; 
11

यह क्योंकि एक नाव स्वाभाविक अनिश्चित है काम नहीं करता। वास्तविक मूल्य शायद '101.3100000000001' जैसा कुछ है, आप पहले इसे 2 स्थानों पर गोल करने के लिए ROUND() का उपयोग कर सकते हैं, या बेहतर अभी तक एक फ्लोट के बजाय एक डेसिमल प्रकार का उपयोग कर सकते हैं।

8

कभी भी पैसे के लिए फ्लोट का उपयोग न करें।

+6

मुझे ग्राहक के लिए कहां से परिवर्तन मिल सकता है? (क्षमा करें, वहाँ दुकानदार हास्य का थोड़ा सा :) – Meep3D

-1

क्या यह काम करता है?

SELECT * , ROUND(price, 2) rounded 
FROM table 
WHERE ident = 'ident23' 
HAVING rounded = 101.31 
6

आज, मैं भी एक ही स्थिति में आए और हल सिर्फ MySQL का स्वरूप फ़ंक्शन का उपयोग करके, यह परिणाम है कि वास्तव में अपने कहां खंड से मेल खाते हैं वापस आ जाएगी।

SELECT * FROM yourtable WHERE FORMAT(col,2) = FORMAT(value,2) 

स्पष्टीकरण: FORMAT('col name', precision of floating point number)

0

मैं समाधान के लिए खोज रहा था, लेकिन अंत में मैं यह मेरे पिछले php number_format का उपयोग कर किया था() जो @ hmasif के समाधान को देखने में आया था।

उपयोग इस और आप अपने नाव मिल जाएगा - mysql मैच:

$floatmatch = number_format((float)$yourfloatvariable,5); 

जहां 5 दशमलव बिंदु से पांच तार है। जैसे 7.93643

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