SQL自动截止期限日期

时间:2017-06-01 07:23:44

标签: sql sql-server date

以下是表格中的出席列表。每个月我都需要根据从20个月/上个月 - 19个/当月开始的截止期来监控出勤率。

  Date       Branch      Attendance
13/04/2017  Branch A         5
14/04/2017  Branch A         5
22/04/2017  Branch A         5
30/04/2017  Branch A         5
17/05/2017  Branch A         6
18/05/2017  Branch A         6
01/04/2017  Branch B         17
15/04/2017  Branch B         14
20/04/2017  Branch B         14
19/05/2017  Branch B         17
20/05/2017  Branch B         15
25/05/2017  Branch B         17

例如;我想在五月份展示,截止时间为20/4/2017 - 2017/5/17。 以下是我的代码:

SELECT
  CONVERT(VARCHAR,Date,103) AS Date, 
  Branch, 
  Attendance
FROM 
  Table_attd
WHERE 
  Date>=DATEADD(DAY,(SELECT DATEDIFF (DAY,(DATEADD(DAY,0,GETEDATE())),
       (DATEADD(MONTH,-1,CONVERT(DATETIME,CAST(YEAR(GETDATE()) AS 
       VARCHAR)+'/'+CAST(MONTH(GETDATE()) AS 
       VARCAHR)+'/'+'19',102))))),GETDATE())
       AND Date<=DATEADD(DAY,-1,GETDATE()) 

结果:

  Date       Branch  Attendance
22/04/2017  Branch A    5
30/04/2017  Branch A    5
17/05/2017  Branch A    6
18/05/2017  Branch A    6
20/04/2017  Branch B    14
19/05/2017  Branch B    17

但是我意识到我的代码有一个缺陷,当Jun月份(截止时间为2017年5月20日 - 2017年6月19日)时,结果将是不正确的。 请建议 - 谢谢!

4 个答案:

答案 0 :(得分:0)

您的查询语法不正确,您可以使用此

DECLARE @CurrentDate date = getdate()
DECLARE @20PreviousMonth date  = dateadd(day,19,dateadd(month,datediff(month,0,@CurrentDate) - 1,0))
DECLARE @19CurrentMonth date  = dateadd(day,18,dateadd(month,datediff(month,0,@CurrentDate) ,0))

SELECT
     CONVERT(VARCHAR,[Date],103) AS Date, 
     Branch, 
     Attendance
FROM 
    Table_attd
WHERE 
    [Date] BETWEEN @20PreviousMonth AND @19CurrentMonth

答案 1 :(得分:0)

array(
    array("number" => 1), array("number" => 2), array("number" => 3) 
)

答案 2 :(得分:0)

解决此问题的另一种方法是创建“日期”表。

12000

然后只需通过'ReportingMonth'将此表连接到您的事实表和组。这使您可以从任何时间段快速调用数据,并允许在切换日期灵活。

答案 3 :(得分:0)

或者你可以试试这个。

$php_size = substr(ini_get('upload_max_filesize'), 0, -1) * 1048576;

if ($size > $php_size) {...}