【问题标题】: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 &lt;= 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 ) &lt;= '01/02/2013'

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-17
          • 2021-02-05
          • 1970-01-01
          • 2015-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多