0

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

BETWEEN DATEADD(DAY, -2, DATEADD(DAY, DATEDIFF(DAY,0,GETDATE()), 0)) 和 DATEADD(SECOND, -86401, DATEADD(DAY, DATEDIFF(DAY,0,GETDATE()),0 ))

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

4

1 回答 1

1

如果您将新参数传递到存储过程中:

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

添加秒数似乎不必要地复杂:

>= DATEADD(DAY, -2, @BEGINDATE) and XXX < DATEADD(DAY, -1, @BEGINDATE)
于 2013-09-11T01:18:47.473 回答