如何在MySQL中舍入DateTime?

Jad*_*ias 2 c# mysql math datetime rounding

我想以5分钟的分辨率将DateTime离散化.我在C#中做过,但是如何将以下代码转换为MySQL?

DateTime Floor(DateTime dateTime, TimeSpan resolution)
{
    return new DateTime
        (
             timeSpan.Ticks * 
             (long) Math.Floor
             (
                  ((double)dateTime.Ticks) / 
                  ((double)resolution.Ticks)
             )
        );
}
Run Code Online (Sandbox Code Playgroud)

O. *_*nes 7

使用datetime数据类型时,这有点令人讨厌; 存储函数的一个很好的候选者.

DATE_SUB(DATE_SUB(time, INTERVAL MOD(MINUTE(time),5) MINUTE ), 
         INTERVAL SECOND(time) SECOND)
Run Code Online (Sandbox Code Playgroud)

使用UNIXTIME时间戳时更容易,但这仅限于1970 - 2038年的日期范围.

FROM_UNIXTIME(UNIX_TIMESTAMP(time) - MOD(UNIX_TIMESTAMP(time),300))
Run Code Online (Sandbox Code Playgroud)

祝好运.

  • 对于夏令时变化之间的日期时间,unix时间方法失败.例如:`select FROM_UNIXTIME(UNIX_TIMESTAMP('2012-03-11 2:14:00') - MOD(UNIX_TIMESTAMP('2012-03-11 2:14:00'),300));` (2认同)