【问题标题】:Creating time parameter in SSMS 2016 for SSRS report在 SSMS 2016 中为 SSRS 报告创建时间参数
【发布时间】:2020-05-27 17:36:50
【问题描述】:

我正在尝试创建一个 SSRS 报告,该报告允许用户除日期外还按时间范围搜索工作订单。例如:从 2020 年 5 月 1 日至 2020 年 5 月 27 日下午 5:00 之间发生的请求。和晚上 7:00下面是我在 SSMS 2016 中的存储过程,我注释掉了时间参数,因为它们不起作用。这会产生我需要的未精炼数据并且日期参数有效,这是我遇到问题的时间参数。

@STARTDATE DATE,
@ENDDATE DATE
--@STARTTIME TIME,
--@ENDTIME TIME
AS

SELECT 
   [PROBLEMCODE]
  ,FORMAT([DATETIMEINIT], 'yyyy-MM-dd') AS 'DATE'
  ,FORMAT([DATETIMEINIT], 'hh:mm tt') AS 'TIME'
  ,[STATUS]
FROM [Cityworks].[azteca].[REQUEST]
WHERE REQCATEGORY IN ('WATER', 'SEWER')
AND [DATETIMEINIT] BETWEEN @STARTDATE AND @ENDDATE
--AND FORMAT([DATETIMEINIT], 'HH:mm') BETWEEN @STARTTIME AND @ENDTIME;

这是我第一次发帖,所以我希望所有这些都有意义!感谢您的帮助!

【问题讨论】:

  • 为什么要在SELECT 中格式化结果?这就是表示层(此处为 SSRS)的用途。此外,如果您想将日期和时间数据类型与日期和时间数据类型进行比较,只需进行比较即可:AND DATETIMEINIT >= @StartTime AND DATETIMEINIT < @EndTime
  • 我是一个新的 SQL 用户,所以我仍在学习查询与 SSRS 的区别。当我运行您提供的比较时,我收到此错误“数据类型日期时间和时间在大于或等于运算符中不兼容。”当我使用 BETWEEN 时,我没有收到错误,但它也没有做任何事情。将参数从程序中取出并在 SSRS 上设置会更好吗?
  • 这没有意义,你有一个名为DATETIMEINIT的列,所以它必须datetime/datetime2/datetimeoffset,然后是你的两个参数被声明为date。这些数据类型不会出现该错误
  • 你是对的,它设置为日期时间,但是当我取消注释时间参数时,我得到了那个错误。我在 BETWEEN 上弄错了,它给了我同样的错误。

标签: sql sql-server sql-server-2016


【解决方案1】:

就像我说的,假设DATETIMEINITdatetime/datetime2/datetimeoffset

CREATE dbo.YourProc @StartDate date, @EndDate DATE --Or datetime2, etc, depending on requirement
AS
BEGIN

    SELECT [PROBLEMCODE],
           DATETIMEINIT,
           [STATUS]
    FROM [Cityworks].[azteca].[REQUEST]
    WHERE REQCATEGORY IN ('WATER', 'SEWER')
    AND [DATETIMEINIT] >= @STARTDATE
      AND DATETIMEINIT < @ENDDATE;

END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多