2013-10-10 13 views
7

Ich mag die Datumzeit rund 15 Minuten in einer MySQL-Datenbank-Tabelle aktualisieren.MYSQL Rund um die Datumzeit bis 15 Minuten

Beispiel:

Wenn die Datums- und Uhrzeit 2013-10-08 10:36:00 ist, möchte ich es in 2013-10-08 10:30:00 ähnlich konvertieren, 2013-10-08 10:22:00-2013-10-08 10:15:00

ich this Antwort gesehen, aber es wandelt Datumzeit in Sekunden und Rücklaufzeit nur, Ich möchte auch ein Date haben.

Dank

+2

möglich Duplikat [MYSQL Datum Zeit Abrunden Stunde] (http://stackoverflow.com/questions/9680144/mysql-date-time-round-to-nearest-hour) –

+1

dies Siehe auch: http: // stackoverflow.com/questions/2480637/round-minute-down-to-nearest-quarter-hour –

+0

@TomaszKowalczyk: Die erste Frage ist, um ganze Stunden über Rundung, die eher einfache Lösungen. Letzteres ist PHP. – Kaivosukeltaja

Antwort

6

Die Antwort, die Sie gesehen haben, ist sehr nützlich, versuchen Sie diese

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 

Sie können Zeit vom datetime_field als Teilzeichenfolge erhalten und sie durch die gerundete Zeit ersetzen.

, wenn Sie die Datetime aktualisieren möchten, können Sie es antworten und aktualisieren Sie es mit Update-Funktion

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

Ich hoffe, das hilft ...

+0

dank .. es hat funktioniert .. es war nicht so schwierig, was ich ... danke erwartet .. – Ana

0

Verwenden Sie die gleiche Methode wie in der Frage, die Sie verknüpfen, sondern UNIX_TIMESTAMP Funktionen verwenden. Dies wird entweder nach unten oder bis zu den nächsten 15 Minuten abgerundet, entfernen Sie den + 450 Teil, wenn Sie nur nach unten runden möchten.

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

danke, ich die andere Antwort ausprobiert und es funktioniert für mich .. trotzdem danke – Ana

0

Sie Antwort ändern können Sie (wenn Sie mit ihm zufrieden) fand gerade von der Zeit, verketten Datum:

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

Dank, habe ich versucht, die andere Antwort und es funktionierte wieder für mich .. trotzdem danke – 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

dank, habe ich versucht, die andere Antwort und es funktionierte für mich .. trotzdem danke – Ana

1

unix_timestamp mit ganz simpe Arithmetik erlaubt, 15 in der ändern Code unten, um eine andere Nummer, falls erforderlich (zB 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 

siehe: http://forums.mysql.com/read.php?20,131939,201089#msg-201089

Verwandte Themen