2013-10-10 9 views
7

पर गोल करें मैं डेटाटाइम राउंड को MYSQL डेटाबेस तालिका में 15 मिनट में अपडेट करना चाहता हूं।MYSQL डेटाटाइम को 15 मिनट

उदाहरण के लिए:

तो dateTime 2013-10-08 10:36:00 है, मैं इस पर 2013-10-08 10:30:00 इसी तरह, 2013-10-08 10:22:002013-10-08 10:15:00

को मैं this जवाब देखा है परिवर्तित करना चाहते हैं, लेकिन यह सेकंड में datetime धर्मान्तरित और केवल वापसी समय, मुझे तारीख भी चाहिए।

धन्यवाद

+2

संभवतः डुप्लिकेट [MYSQL दिनांक समय दौर निकटतम समय तक) (http://stackoverflow.com/questions/9680144/mysql-date-time-round-to-nearest-hour) –

+1

यह भी देखें: http: // stackoverflow.com/questions/2480637/round-minute-down-to-nearest-quarter-hour –

+0

@TomaszKowalczyk: पहला सवाल पूरे घंटों तक घूमने के बारे में है, जिसके बजाय सरल समाधान हैं। उत्तरार्द्ध एक PHP है। – Kaivosukeltaja

उत्तर

6

जवाब आप को देखा है काफी उपयोगी है, इस

कोशिश
SELECT SUBSTRING_INDEX(datetime_field, ' ', -1) AS old_time,SEC_TO_TIME((TIME_TO_SEC(datetime_field) DIV 900) * 900) AS rounded_time, datetime_field FROM yourtable 

आप डेटाटाइमफील्ड से समय निकाल सकते हैं और इसे गोलाकार समय के साथ प्रतिस्थापित कर सकते हैं।

यदि आप दिनांक को अपडेट करना चाहते तो आप इसे उत्तर और अद्यतन समारोह के साथ अपडेट

UPDATE yourtable SET `datetime_field` = REPLACE(datetime_filed,SUBSTRING_INDEX(datetime_field, ' ', -1),SEC_TO_TIME((TIME_TO_SEC(datetime_field) DIV 900) * 900)) 

मुझे आशा है कि मदद करता है ...

+0

धन्यवाद .. यह काम किया .. यह मुझे मुश्किल नहीं था ... धन्यवाद फिर से .. – Ana

0

सवाल आप लिंक में के रूप में ही विधि का उपयोग करें, लेकिन इसके बजाय UNIX_TIMESTAMP कार्यों का उपयोग। यह या तो नीचे या नीचे के करीब 15 मिनट तक होगा, यदि आप केवल नीचे जाना चाहते हैं तो + 450 भाग हटा दें।

mysql> select FROM_UNIXTIME(((UNIX_TIMESTAMP('2013-08-07 12:05') + 450) DIV 900) * 900) AS roundtime; 
+---------------------+ 
| roundtime   | 
+---------------------+ 
| 2013-08-07 12:00:00 | 
+---------------------+ 
+0

धन्यवाद, मैंने दूसरे उत्तर की कोशिश की और यह मेरे लिए काम किया .. धन्यवाद – Ana

0

तुम सिर्फ समय के लिए तारीख श्रृंखलाबद्ध से आप पाया जवाब (यदि आप इसे से संतुष्ट) को संशोधित कर सकते हैं:

SELECT CONCAT(DATE(time_field), 
       ' ', 
       SEC_TO_TIME((TIME_TO_SEC(time_field) DIV 900) * 900)) 
FROM `your_table` 
+0

धन्यवाद, मैंने दूसरे जवाब की कोशिश की और यह काम किया मेरे लिए .. धन्यवाद वैसे भी – Ana

6
SELECT NOW() x,FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(NOW())/900)*900) y; 
+---------------------+---------------------+ 
| x     | y     | 
+---------------------+---------------------+ 
| 2013-10-10 09:50:20 | 2013-10-10 09:45:00 | 
+---------------------+---------------------+ 
+0

धन्यवाद, मैंने दूसरे जवाब की कोशिश की और यह मेरे लिए काम किया .. धन्यवाद वैसे भी – Ana

1

unix_timestamp का उपयोग कर काफी simpe अंकगणित की अनुमति देता है सकते हैं, में 15 बदल http://forums.mysql.com/read.php?20,131939,201089#msg-201089

: कुछ अन्य नंबर करने के लिए नीचे दिए गए कोड अगर (जैसे 30 के रूप में)

select from_unixtime(round(unix_timestamp('2013-10-08 10:36:00')/(60*15))*(60*15)); 

= October, 08 2013 10:30:00+0000 

select from_unixtime(round(unix_timestamp('2013-10-08 10:22:00')/(60*15))*(60*15)); 

= October, 08 2013 10:15:00+0000 

देखने की जरूरत 210

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