SQL Server - 将 TIME 值舍入到下一分钟

标签 sql sql-server-2008 tsql rounding sqldatetime

我找到了很多关于四舍五入“向下”时间值的帖子(例如 https://stackoverflow.com/a/6667041/468823 ),但我还有另一个问题:我想四舍五入到更高的分钟而不是更低的分钟,我该怎么办?

我的代码:

SELECT

 PA.ORE AS TOT_HOURS,  
 CAST(CAST(PA.ORA_INIZIO AS DATETIME) AS TIME) AS BEGIN_TIME,
 CAST(dateadd(minute, datediff(minute, 0, (CAST(PA.ORA_INIZIO AS DATETIME))), 0) AS TIME) AS BEGIN_TIME_ROUNDED


FROM PRG_ATTIVITA PA INNER JOIN PRG_TIPI_ATTIVITA PTA ON  PA.ID_TIPO_ATTIVITA = PTA.ID_TIPO_ATTIVITA
                     INNER JOIN PER_ANAGRAFICA PAN ON PA.ID_DIPENDENTE = PAN.ID_DIPENDENTE
WHERE PA.ID_PROGETTO = 1431 and pta.DESCR_TIPO_ATTIVITA like 'F-%remoto%' and ID_ATTIVITA = 41772 

ORDER BY  PA.DATA_ATTIVITA

我的结果如下:
    TOT_HOURS   BEGIN_TIME          BEGIN_TIME_ROUNDED
    1.50        15:59:59.9970000    15:59:00.0000000

我想要 BEGIN_TIME_ROUNDED = 16:00:00.0000000

笔记:
1. 我必须转换我的数据 { CAST(PA.ORA_INIZIO AS DATETIME) } 因为在数据库中我有时间数据作为浮点值
2. BEGIN_TIME 是我转换后的时间值的真实值

最佳答案

SELECT  DATEADD(MINUTE, CEILING(DATEDIFF(SECOND, 0, CAST(CAST(PA.ORA_INIZIO AS DATETIME) AS TIME)) / 60.0), DATEDIFF(DAY, 0, PA.ORA_INIZIO)) AS BEGIN_TIME_ROUNDED

关于SQL Server - 将 TIME 值舍入到下一分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9274457/

相关文章:

sql-server - 用于更新列中具有相同值的行的 T-SQL

mysql - 选择查询中获取的两列的差异

java - 如何从 Hibernate Criteria 对象中获取绑定(bind)参数?

sql - 在TSQL中,如何计算表达式并将其分配给BIT字段?

sql - 无法从每个后天的日期时间列中获取 MIN 和 MAX 时间

sql-server-2008 - SQL Server 2008 中的左循环连接

sql-server - 有效清理表格中的字符串

mysql - 创建一个触发器来插入一些内容,如果

sql - Teradata SQL 中的多个连接 - 更快地使用子查询或临时表?

sql-server-2008 - 使用 BULK INSERT 未正确导入重音字符