从日期字段中减去日期

时间:2013-05-08 01:42:09

标签: sql-server date

原始问题

我需要编写一个Microsoft SQL语句,其中我从另一个表中减去日期。因此,基本上,表格示例如下:

Table 1 (date)           Table 2 (number of days)
2013-05-08 23:59:13.000     7
2013-05-08 23:59:16.000     7
2013-05-08 23:59:06.000     7

任何帮助都将不胜感激。

更新问题

我必须处理的唯一两项是以下信息:

enter image description here

我需要知道发票在发票队列中的时间。 TimeoutDate是发票超时的时间,TimeOutDays是该队列超时之前给出的天数,但它是工作日,因此不包括周末。

因此,如果您根据此信息计算,发票已在队列中 8个工作日< - 这是我需要从查询中获得的答案。

额外信息

发票已于2013年4月30日系统输入,但由于webapp不计入发票进入系统的日期,因此超时计数器将在第二天开始,即2013年1月5日。希望这解释得更清楚一点!

我有一个快速查询,但这没有帮助,因为它没有显示我需要的东西,但实际上下面是我需要的结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试

SELECT DATEADD(day, -(t2.days), t1.datefield) new_date
  FROM table1 t1 JOIN
       table2 t2 ON t1.id = t2.id

输出:

|                   NEW_DATE |
------------------------------
| May, 01 2013 23:59:13+0000 |
| May, 01 2013 23:59:16+0000 |
| May, 01 2013 23:59:06+0000 |

<强> SQLFiddle

更新:完全更改问题的解决方案

SELECT timeoutdate,
       timeoutdays,
       timeoutdays
       -((DATEDIFF(dd, GETDATE(), timeoutdate) + 1)
       -(DATEDIFF(wk, GETDATE(), timeoutdate) * 2)
       -(CASE WHEN DATENAME(dw, GETDATE()) = 'Sunday' THEN 1 ELSE 0 END)
       -(CASE WHEN DATENAME(dw, GETDATE()) = 'Saturday' THEN 1 ELSE 0 END)) daysinqueue
FROM table1

输出:

|             TIMEOUTDATE | TIMEOUTDAYS | DAYSINQUEUE |
-------------------------------------------------------
| 2013-05-14 23:59:13.000 |          10 |           9 |

<强> SQLFiddle

感谢@CMS获取solution获取两个日期之间的工作日数

答案 1 :(得分:0)

您可以尝试这样的事情

Select DATEADD(month, -(Table2.day) , Table1.date) 
FROM Table1 Inner Join Table2
ON Table1.Col=Table2.Col

当然,您可以根据您的结构修改连接。