2012-12-04 16 views
13

पर समय को कैसे गोल करें I MySQL में निकटतम 15 मिनट (उदा। 0,15,30,45) में गोल कैसे कर सकते हैं?निकटतम 15 मिनट सेगमेंट

+1

क्या आप हमें अब तक कुछ भी दिखा सकते हैं? :-) फिर हम तदनुसार सुझाव दे सकते हैं। – bonCodigo

+0

'mod' के साथ' timestampdiff' का उपयोग क्यों नहीं करें? बीटीडब्ल्यू मैं अपनी पिछली टिप्पणी लेता हूं क्योंकि मुझे पता नहीं है कि जवाब आपके द्वारा है। आप अपने कोड को जोड़कर बस अपना प्रश्न अपडेट कर सकते थे :-) – bonCodigo

उत्तर

17
SELECT SEC_TO_TIME(FLOOR((TIME_TO_SEC(CURTIME())+450)/900)*900) 

इस उदाहरण में मैंने इनपुट समय के लिए CURTIME() का उपयोग किया है, लेकिन आप किसी भी समय क्षेत्र का उपयोग कर सकते हैं।

900 सेकेंड = 15 मिनट (गोल करने की अवधि), 450 सेकंड आधा है (गोल तत्व प्रदान करने के लिए)। मैंने निकटतम आधे घंटे के लिए 1800/900 के साथ परीक्षण किया है, दूसरों के साथ काम करना चाहिए (600/300 10 मिनट के लिए आदि)।

0

यहां कुछ मोटा कोड है जिसका मैंने उपयोग किया जो परिणाम मुझे वास्तव में जो चाहिए था उसके करीब मिला। क्योंकि मैंने सेकंड का उपयोग नहीं किया था, इसलिए मैंने आधे रास्ते के करीब मिनटों का चयन किया था।

SELECT 
     CASE 
      WHEN minute(timeIn) BETWEEN 0 and 7 THEN SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600) 
      WHEN minute(timeIn) BETWEEN 8 and 22 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '00:15:00') 
      WHEN minute(timeIn) BETWEEN 23 and 37 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '00:30:00') 
      WHEN minute(timeIn) BETWEEN 38 and 52 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '00:45:00') 
      WHEN minute(timeIn) BETWEEN 53 and 59 THEN ADDTIME(SEC_TO_TIME((TIME_TO_SEC(timeIn) DIV 3600) * 3600), '01:00:00') 
     END as 15_min 
    FROM 
     clock.punches; 
12
SELECT FROM_UNIXTIME(TRUNCATE(UNIX_TIMESTAMP(NOW())/900,0)*900); 

यह किसी भी समय मूल्य के पूर्णांक बनाना सामान्यीकृत किया जा सकता। 900 सेकंड = 15 मिनट। आप किसी अन्य गोलिंग कारक के साथ 900 को प्रतिस्थापित कर सकते हैं।

+0

हां 900 को किसी भी समय बदला जा सकता है लेकिन आपके द्वारा प्रदान किया गया कोड हमेशा गोल हो जाएगा। – donL

+1

TRUNCATE के बजाय CEIL() का उपयोग करें() –

+2

यहां तक ​​कि बेहतर (तेज़) परिणाम भी उपयोग करने के लिए [पूर्णांक विभाजन] (http://dev.mysql.com/doc/refman/5.0/en/arithmetic-functions.html#operator_div) (जो नीचे गिरता है, ऊपर नहीं है लेकिन इससे कोई फर्क नहीं पड़ता) - या विभाजित करने और गुणा करने के बजाय संख्या से 'एमओडी 900' घटाएं। – Ariel

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