DATEADD使用小数 - 变通办法吗?

时间:2011-11-24 12:04:15

标签: tsql datetime dateadd

我正在尝试做类似下面的事情(我已经简化了问题,试图解决这个问题)。

PRINT DATEADD(week, 0.2,  GETDATE())

我认识到由于dateadd的number参数被截断为int而无法工作。

我正试图想出一种方法,将0.2转换为数小时,然后能够使用类似的东西(我很好,因为它与小时一样准确)。

PRINT DATEADD(hour, X,  GETDATE())

任何想法如何开始?我发现找到任何东西来获取另一个日期部分中的一个日期部分的十进制表示法很棘手。

它必须是基于集合的性能查询。

理论上我必须这样做,所以也可以使用十进制年份,但我会把它作为一个单独的问题来解决......

2 个答案:

答案 0 :(得分:6)

1周= 7天= 168小时= 10080分钟

0.2周= 2016分钟

PRINT DATEADD(minute, 2016, GETDATE())

为了让这个工作多年,您可以编写一个User Defined Function,您可以在其中输入十进制年份,然后将其乘以分钟数,然后使用DATEADD运行minutes

答案 1 :(得分:0)

这就是我想出来的,因为它对任何人都有用。 Curt帮助我睁开眼睛,我的问题实际上并没有我想象的那么复杂。我已将Curt的答案标记为解决方案,但这里有一些示例代码。值得注意的是,10%不是我原来的问题,但它证明了为什么我需要小数。

DECLARE @DatePart int,
        @DateNumber int;

SET @DatePart = 1
SET @DateNumber = 1                         

PRINT
    DATEADD(
                hour,
                CEILING
                (           
                    CASE @DatePart
                        WHEN 1 THEN @DateNumber * 24.000000 --days
                        WHEN 2 THEN @DateNumber * 168.000000 --weeks
                        WHEN 3 THEN @DateNumber * 730.484398 --months
                        WHEN 4 THEN @DateNumber * 8765.81277 --years
                    END / 100.000000 * 10.000000
                ),
                GETDATE()
            )