在存储过程中使用报表参数而不是GETDATE

时间:2013-09-10 23:54:19

标签: sql-server stored-procedures reporting

我有一个SQL查询,它保存为存储过程。我使用三种不同的存储过程,根据今天的日期返回1,2或3天。这使我的仪表板用户可以在比较统计数据时返回并跳过周末。这实际上有效。它查看今天的日期,如果是星期天又回到2天,如果是星期一,则返回3天,否则返回1天。仪表板在报表生成器中创建。下面显示了今天是星期日之间的日期(即跳过2天,然后回到星期五,即最后一个正常工作日)。背景太多了。我的挑战现在是仪表板的用户想要报告中的BeginDate和EndDate日期选择器参数,所以我不能再使用这些硬编码的日期字符串,但必须将参数合并到它们中。如何在下面的行中替换一个名为@BeginDate的参数,其中显示“GETDATE()”:

在DATEADD之间(DAY,-2,DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0)) 和DATEADD(第二,-86401,DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()),0))

根据最终用户选择的日期,然后使用三个存储过程之一。我想我可以以某种方式使这项工作,但我无法弄清楚如何用用户输入的参数替换上面的GETDATE()。如果我只是用参数替换它,它会抛出错误。我确信有一种非常聪明的方法可以做到这一点。我还在寻找!!!

1 个答案:

答案 0 :(得分:1)

如果要将新参数传递给存储过程:

BETWEEN DATEADD(DAY, -2, @BEGINDATE) AND DATEADD(SECOND, -86401, @BEGINDATE)

添加秒似乎不必要的复杂:

>= DATEADD(DAY, -2, @BEGINDATE) and XXX < DATEADD(DAY, -1, @BEGINDATE)