原始问题
我需要编写一个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
任何帮助都将不胜感激。
更新问题
我必须处理的唯一两项是以下信息:
我需要知道发票在发票队列中的时间。 TimeoutDate是发票超时的时间,TimeOutDays是该队列超时之前给出的天数,但它是工作日,因此不包括周末。
因此,如果您根据此信息计算,发票已在队列中 8个工作日< - 这是我需要从查询中获得的答案。
额外信息
发票已于2013年4月30日系统输入,但由于webapp不计入发票进入系统的日期,因此超时计数器将在第二天开始,即2013年1月5日。希望这解释得更清楚一点!
我有一个快速查询,但这没有帮助,因为它没有显示我需要的东西,但实际上下面是我需要的结果:
答案 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
当然,您可以根据您的结构修改连接。