2009-10-08 12 views
5

बेवकूफ आसान समस्या, लेकिन मैं एक सुरुचिपूर्ण समाधान खोजने में सक्षम नहीं हूं। मैं एक MySQL कॉलम में समय अंतराल स्टोर करना चाहता हूं, उदाहरण के लिए:MySQL में समय अंतराल मानों को संग्रहीत करने का सबसे अच्छा तरीका?

1:40 (एक घंटे, 40 मिनट) 0:30 (30 मिनट)।

फिर उनको संक्षेप में क्वेरी चलाने में सक्षम होना चाहिए। अभी मैं उन्हें आईएनटी मान (1.40) के रूप में स्टोर करता हूं, लेकिन मुझे मैन्युअल रूप से जोड़ना है (जब तक कि मैं एक आसान तरीका नहीं खो रहा हूं)।

टाइम कॉलम प्रकार केवल 900 घंटे तक (लगभग, मुझे लगता है) स्टोर करता है, इसलिए यह मेरे लिए बेकार है (क्योंकि) मैं सैकड़ों हजारों घंटे से ऊपर की ओर देख रहा हूं (मैं कई फ़ील्ड के एक सारांश के साथ एक फ़ील्ड स्टोर करता हूं प्रविष्टियों)।

धन्यवाद!

उत्तर

8

बस कुछ ही मिनटों में स्टोर करें, इसलिए 1:40 100 के रूप में संग्रहीत हो जाता है। यह आसान जोड़ के लिए बनाता है: 100 + 30 = 130. जब आप प्रदर्शित करते हैं, तो गणित को घंटों में परिवर्तित करने के लिए करें: मिनट। 130 मिनट -> 2:10।

+0

मैं अपने एप्लिकेशन में से एक में एक ऐसी ही बात किया है, फिर भी मैं सेकंड के बजाय स्टोर ताकि मेरे राशि उन सभी आंशिक मिनट खोना नहीं करता। –

+2

हाँ, यदि आप सेकंड ट्रैक करने की जरूरत है, तो सेकंड है। लेकिन सवाल केवल मिनटों के बारे में पूछता है। – longneck

4

मैं उन्हें केवल एक आईएनटी फ़ील्ड में सेकंड या मिनट के रूप में स्टोर करता हूं (या जो भी न्यूनतम समय मूल्य आप काम कर रहे हैं)।

उदाहरण के लिए, आप निम्नलिखित समय मूल्य 1 घंटे 34 मिनट 25 सेकंड संग्रहीत करना चाहते हैं:

5665 सेकंड है। तो बस एक INT क्षेत्र

बाद में 5665 के रूप में मूल्य की दुकान, मान लीजिए कि आपने समय मूल्य 56 मिनट 7 सेकंड संग्रहीत करना चाहते हैं:

3367 सेकंड है यही कारण है कि। बाद में

योग अप सब कुछ: 5665 + 3367 = 9032 सेकंड

Convert कि वापस घंटे, मिनट, सेकंड के लिए, आपको 2 घंटे 30 मिनट 32 सेकंड मिलता है। हां, आपको रूपांतरण करने के लिए गणित करना है, लेकिन यह एक बहुत ही सरल गणना है और यह सभी मशीन गहन नहीं है क्योंकि आप आईएनटी को पुनः प्राप्त करने के बाद आईएनटी स्टोर करने से पहले या तो एक बार ऐसा कर रहे हैं।

4

आप निश्चित रूप से इस के लिए एक int क्षेत्र का उपयोग कर सकते, खासकर जब से MySQL तारीख artihmetic में साथ-साथ तारीख और datetime प्रकार समय की पूर्णांक इकाइयों का उपयोग कर के लिए DATE_ADD और DATE_SUB कार्यों प्रदान करता है।

उदाहरण के लिए, यदि आप एक datetime स्तंभ eventDateTime है और आप एक अवधि स्तंभ durationMinutes है आप न खत्म होने वाली दिनांक का उपयोग कर की गणना कर सकते हैं:

DATE_ADD(eventDateTime,INTERVAL durationMinutes MINUTE) 
+0

अच्छा, आप क्वेरी के रूप में अच्छी तरह से – Va1iant

0

आप उन्हें घंटे के रूप में संग्रहीत करना चाहते हैं, और इस प्रकार पूर्णांक रखने छोटा, आप मिनटों की संख्या ले सकते हैं और 60 तक विभाजित कर सकते हैं।

तो 1:40 100/60 = 1.66 बन जाता है, 30 30/60 = .5 बन जाता है।अब आप सिर्फ उन्हें जोड़ सकते हैं सामान्य रूप से:

1.66 + .5 = 2.16 

और फिर आप पूरे के रूप में घंटों की संख्या है, और दशमलव हिस्सा 60 से अधिक मिनट की संख्या है, तो यह है कि हो सकता है

.16 * 60 = 10 

तो यह 2:10

आपका अगला सबसे अच्छा विकल्प है, तो MySQL base60 कर सकते हैं देखने के लिए है।

+1

दिखाने जब चल मूल्यों आप गोलाई त्रुटियों में आ सकते हैं, ई के रूप में घंटे की बचत। जी। 100 मिनट * नहीं * बिल्कुल 1.66 घंटे हैं। आगे के संचालन के साथ आपकी त्रुटि बड़ी हो जाती है। – joschi

+0

क्यों तैरता है? अगर आप सेकंड चाहते हैं तो बस सेकंड स्टोर करें। इसके लिए 32 बिट भी पर्याप्त हैं, और आप गोल त्रुटियों में नहीं आते हैं। मिलीसेकंड के लिए, 64 बिट int प्रकार हैं (अधिकांश SQL डेटाबेस के लिए BIGINT)। – Frizi

+0

सेकंड नहीं, मिनट। और सेप समय के साथ घंटों के साथ समय मात्रा को स्टोर करने का एक तरीका मांग रहा था (इसलिए मिनट आधार का अंश होगा)। यह भी याद नहीं है कि फ्लोट आदर्श क्यों लग रहा था। – Anthony

0

मुझे पता है कि यह उस समय का अंतराल नहीं है जिसके बारे में आप बात कर रहे हैं, जब मैंने इसे खोजा तो एकमात्र प्रासंगिक एसओ सवाल मैंने पाया, इसलिए मेरे जैसे अन्य खोए हुए आत्माओं की मदद करने के लिए मैंने सोचा कि मैं पोस्ट करूंगा मैं अब क्या कर रहा हूँ

मैं एक सदस्यता लंबाई, जो बल्कि "सेकंड की संख्या" या यहाँ तक कि मिनट की तरह सटीक मान से या तो दिन या महीने है भंडारण कर रहा हूँ। तो मेरे मामले में मैं एक "अवधि" INT और की एक "duration_unit" enum ('दिन', 'महीने की) है।

तो 6 महीने में कितने मिनट की गणना करने की कोशिश करने के बजाय "6 महीने" सदस्यता के लिए (जो कि 6 महीने के बारे में आप बात कर रहे हैं, इस पर निर्भर करता है) मैं बस "6" और "महीने" स्टोर करता हूं।

PHP के mktime() विधि के साथ

यह आसान और अधिक +6 महीने की समय अंतराल की गणना करने के सटीक है।

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

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