Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 四舍五入到上四分之一小时,具有灵活性_Mysql_Sql - Fatal编程技术网

Mysql 四舍五入到上四分之一小时,具有灵活性

Mysql 四舍五入到上四分之一小时,具有灵活性,mysql,sql,Mysql,Sql,我想用另一列(称为“RoundHours”)上的小时增量(表中称为“小时”)将表更新为四舍五入到最近的四分之一小时,并具有3分钟的灵活性 下面是我的typescript函数,它完全符合我的要求: function RoundHourToUpperQuarter(hourNumber: number, flexibilityInMinutes: number) { if (hourNumber === 0) { return 0; } else {

我想用另一列(称为“RoundHours”)上的小时增量(表中称为“小时”)将表更新为四舍五入到最近的四分之一小时,并具有3分钟的灵活性

下面是我的typescript函数,它完全符合我的要求:

function RoundHourToUpperQuarter(hourNumber: number, flexibilityInMinutes: number) {
    if (hourNumber === 0) {
        return 0;
    } else {
        if (hourNumber <= 0.25 + (flexibilityInMinutes/60)) {
            return 0.25;
        } else {
            return Math.ceil((hourNumber-(flexibilityInMinutes/60))*4)/4
        }
    }
}
目标是添加一列,其中有四舍五入到上季度的小时数,如上所述

示例:

Hours : 12/60 => RoundHours : 0.25
Hours : 30/60 => RoundHours : 0.5
Hours : 62/60 => RoundHours : 1
Hours : 64/60 => RoundHours : 1.25
提前感谢您的回答,

Zirion.

如果我理解正确,您希望添加12分钟,然后截断到最接近的15分钟

这在“秒”域中比使用日期/时间函数更容易实现。其想法是:

  • 在日期/时间上增加12分钟
  • 将日期/时间转换为秒
  • 截断至最接近的15分钟(即15*60)
  • 转换回日期/时间
  • 步骤(3)可以使用算术完成。以下是一个例子:

    select from_unixtime(15 * 60 * floor((unix_timestamp(now()) + 12 * 60) / (15 * 60)))
    

    只需将
    now()
    替换为所需的
    datetime
    值即可。您的数据模型似乎将其分布在多个列中。我建议改为使用一个
    datetime
    列。但是,如果您真的需要,您可以从您的时间组件中构造一个
    datetime
    值。

    向我们展示一些示例表数据和预期结果-全部以格式化文本(而不是图像)的形式显示。我无法提供更多的代码示例,因为我的工作链接到一个数据库,我无法提供给您。示例数据不一定是真实数据。只是为了说明问题。添加了示例数据,我希望这是您的意图。