【问题标题】:Filter data based on date provided by user根据用户提供的日期过滤数据
【发布时间】:2013-04-26 10:51:27
【问题描述】:
我有一个如下所示的 SQL 查询:-
select *
from dbo.NGPTimesheetsPosition
where ProjectNO = '12169-01-c' AND CreditorEmployeeID <> 'E0000' AND DocType = 'Time Sheet'
这将返回以下数据:
我想要做的是能够只显示直到并包括用户定义日期的数据,例如2013 年 1 月 2 日。
用户定义的日期可以是当前月份之前的任何日期。
非常感谢所有帮助或建议。
【问题讨论】:
标签:
sql
sql-server
tsql
reporting-services
【解决方案1】:
您需要add a parameter to your report,并在您的数据集查询中按照以下方式使用此参数:
SELECT *
FROM dbo.NGPTimesheetsPosition
WHERE ProjectNO = '12169-01-c'
AND CreditorEmployeeID <> 'E0000'
AND DocType = 'Time Sheet'
AND TransactionDate <= @MyDateParameter -- ADDED!
当您声明时,您对参数的可能值的问题并不完全清楚:
用户定义的日期可以是当前月份之前的任何日期。
我认为these folks at SqlServerCentral are right:您不能为数据参数设置限制。这为您提供了两个基本选择:
- 顺其自然。如果需要,您可以在查询中添加
AND @MyDateParameter <= CURRENT_TIMESTAMP 子句。
- 使用可用日期填充数据集,并将其用作参数的available values
【解决方案2】:
select *
from dbo.NGPTimesheetsPosition
where ProjectNO = '12169-01-c' AND CreditorEmployeeID <> 'E0000' AND DocType = 'Time Sheet'
and TransactionDate <= '2013-02-01'
?
【解决方案3】:
在你的 where 子句中进行日期比较,如下所示
Convert( varchar (11) , transactiondate , 101 ) <= '01/02/2013'