3

原始问题

我需要编写一个 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 个工作日<-这是我需要从查询中得到的答案。

额外的信息

发票于 04/30/2013 进入系统,但由于 webapp 不计算发票进入系统的日期,因此超时计数器从后一天开始,即 05/1/2013。希望这解释得更清楚一点!

我有一个快速查询,但这无济于事,因为它没有显示我需要什么,但实际上下面是我需要的结果:

在此处输入图像描述

4

2 回答 2

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 提供获取两个日期之间工作日数的解决方案

于 2013-05-08T02:03:56.987 回答
0

你可以试试这样的

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

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

于 2013-05-08T01:54:36.157 回答