没有得到完美答案的约会

时间:2014-09-30 11:58:46

标签: sql sql-server sql-server-2008

Datediff非常难以获取两天之间的差异:

DATEDIFF(DAY, '2014-09-01','2014-09-07')+1) AS totaldays

当我在上面写的时候它会给我7天它是完美的....

但是当我写下面的

DATEDIFF(DAY, '2014-09-01','2014-09-02')+1) AS totaldays

然后它会给我2天但我希望1 day使用以下功能

 DATEDIFF(DAY, '2014-09-01','2014-09-02')+1) AS totaldays

我怎么能得到它?

3 个答案:

答案 0 :(得分:5)

DATEDIFF功能按预期工作。

DATEDIFF只需通过第一个参数中指定的特定元素从第三个参数中减去第二个参数。

例如,以下查询提供了四列...所有从第三个中指定的日期减去第二个参数中指定的日期:

Select DATEDIFF(DAY, '2014-09-01','2014-09-07')+1,  -- Calculation: (7-1)+1  = 7
       DATEDIFF(DAY, '2014-09-01','2014-09-07'),    -- Calculation: (7-1)    = 6
       DATEDIFF(DAY, '2014-09-01','2014-09-02')+1,  -- Calculation: (2-1)+1  = 2
       DATEDIFF(DAY, '2014-09-01','2014-09-02')     -- Calculation: (2-1)    = 1

结果如预期:

Col1 | Col2 | Col3 | Col4
 7   |   6  |  2   |   1

Here是此功能的MS文档。

如果您希望该功能采取不同的行动,则需要使用CASE声明。

答案 1 :(得分:3)

“日”具有“持续时间”(可以以24小时为单位测量)

  • 该时间从00:00:00 +0000
  • 开始
  • 当我们将日期/时间写为'2014-09-07'时,假设时间是 00:00:00 +0000

所以这个: DATEDIFF(DAY,'2014-09-01','2014-09-07')

衡量的时间间隔为:“2014-09-01的开始”至“2014-09-07的开始”和;试图将此表示为一组持续时间,其中“S”表示起点,“---”表示可计数的持续时间。

  1   2   3   4   5   6   7 (day of the month)
S---S---S---S---S---S---S   (time span)

计算该时间跨度中的“---”数(6)[以及起点数“S”为7]

DATEDIFF()测量“持续时间”而不是起点数

您需要做的是将一天添加到更高的日期,而不是在结果中添加一个,因为您使用的是“开始时间”而非“结束”时间点。

                  from          to
                start of     start of
DATEDIFF(DAY, '2014-09-01','2014-09-08') = 7
DATEDIFF(DAY, '2014-09-01','2014-09-07') = 6
DATEDIFF(DAY, '2014-09-01','2014-09-06') = 5
DATEDIFF(DAY, '2014-09-01','2014-09-05') = 4
DATEDIFF(DAY, '2014-09-01','2014-09-04') = 3
DATEDIFF(DAY, '2014-09-01','2014-09-03') = 2
DATEDIFF(DAY, '2014-09-01','2014-09-02') = 1
DATEDIFF(DAY, '2014-09-01','2014-09-01') = 0

答案 2 :(得分:1)

从SQL中删除+1。

使用以下内容: DATEDIFF(DAY,&#39; 2014-09-01&#39;,&#39; 2014-09-02&#39;)AS totaldays < /强>

由于 +1 ,它输出错误。