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
我怎么能得到它?
答案 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小时为单位测量)
所以这个: 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 ,它输出错误。