2

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

PRINT DATEADD(week, 0.2,  GETDATE())

由于 dateadd 的 number 参数被截断为 int,我意识到这将不起作用。

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

PRINT DATEADD(hour, X,  GETDATE())

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

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

从理论上讲,我必须使它也可以使用小数年,但我将作为一个单独的问题来解决......

4

2 回答 2

6

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

0.2 周 = 2016 分钟

PRINT DATEADD(minute, 2016, GETDATE())

为了让它工作多年,你可以写一个User Defined Function你可以输入小数年的地方,然后乘以分钟,然后DATEADD使用minutes

于 2011-11-24T12:06:54.360 回答
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()
            ) 
于 2011-11-24T12:38:07.633 回答