【问题标题】:I'm trying to filter a SQL dataset by today's date in SSRS using Report Builder我正在尝试使用报表生成器在 SSRS 中按今天的日期过滤 SQL 数据集
【发布时间】:2017-10-04 22:14:58
【问题描述】:

我有一个调用存储过程的 SSRS 报告。流程如下:

USE [TSC-Telaid]
GO
/****** Object:  StoredProcedure [dbo].[TW_spRPTAllReceiverInventory]    Script Date: 10/4/2017 2:06:58 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO



ALTER PROCEDURE [dbo].[TW_spRPTAllReceiverInventory] 
@SiteId varchar(50), 
@ReceiverId int
AS

BEGIN

DECLARE @SQL varchar(8000), @Index int, @Value varchar(500), @Source varchar(100)

SELECT @Index = CHARINDEX('Initial Catalog=', ConnectionString) + 16, @Value = ConnectionString
FROM CustomerSetting
WHERE SiteId = @SiteId

SET @Source = '[' + SUBSTRING(@Value , @Index, CHARINDEX(';', @Value, @Index) - @Index) + ']'

SET @SQL = 'SELECT R.SiteId, L.*
        FROM ' + @Source + '.[dbo].[vwReceiver] R JOIN  ' + 
            @Source + '.[dbo].[vwInventory] L ON R.ReceiverId = L.ReceiverId
        WHERE R.ReceiverId = ' + CAST(@ReceiverId as varchar)

EXEC(@SQL)

END

我在数据集上传入@SiteId 和@ReceiverID。我返回的字段之一是 DateReceived。我想过滤数据集,使其只返回 DateReceived = today() 但它不起作用。

我也尝试将过滤器表达式设置为 DateReceived BETWEEN DateAdd("d",-1,Today()) & DateAdd("d",1,Today())

我对 SQL 并不陌生,但对 SSRS 还是很陌生。

【问题讨论】:

  • 这不是有效的语法。删除日期部分标识符 (''d'') 周围的引号并将 today() 更改为 getdate()。或者,您可以执行...where DateReceived >= cast(getdate() as date) 之类的操作。这将为您提供从当前日期午夜开始的所有内容。
  • @Xedri OP 正在使用 SSRS 功能,因此 today 有效。 @德鲁杰克逊。您的DateReceived 列是否返回日期或日期时间?
  • 它返回一个日期时间
  • @Xedni 我在存储过程中尝试过,但由于我正在转换为日期(甚至是日期时间)并声明我必须转换为 varchar,因此出现错误。该演员无法从字符串转换为日期时间。
  • 我的错。我认为这只是一个普通的旧存储过程。没有意识到这是有效的语法。

标签: sql sql-server reporting-services ssrs-2008 ssrs-tablix


【解决方案1】:

我想我明白了。我不得不将表达式调整为:

DateReceived is between =DateAdd(DateInterval.Day, 0, Today()) AND =DateAdd(DateInterval.Day, 1, Today())

这似乎有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多