Sql 如何从作为参数传递的月份和年份创建完整的datetime
我想让用户从文本框中选择报告中的月份和年份,并使用这些参数为我的服务器参数“DateFrom”和“DateTo”创建月份的第一天和最后一天,这样我就可以将它们用作过滤器 我试过:Sql 如何从作为参数传递的月份和年份创建完整的datetime,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我想让用户从文本框中选择报告中的月份和年份,并使用这些参数为我的服务器参数“DateFrom”和“DateTo”创建月份的第一天和最后一天,这样我就可以将它们用作过滤器 我试过: @DateFrom DATETIME, @DateTo DATETIME, @Month NVARCHAR(MAX) = NULL, @Year NVARCHAR(MAX) = NULL AS BEGIN
@DateFrom DATETIME,
@DateTo DATETIME,
@Month NVARCHAR(MAX) = NULL,
@Year NVARCHAR(MAX) = NULL
AS
BEGIN
SET NOCOUNT ON;
SET @DateFrom = '1.' & @Month & @Year
SET @DateTo = DATEADD(m, 1, DATEADD(s, -1, @DateFrom))
欢迎提供任何帮助。试试这个
SET @DateFrom = SELECT CAST(@Year + '-' + @Month + '-' + '01' AS DATE)
SET @DateTo = DATEADD(m, 1, DATEADD(s, -1, @DateFrom))
您是否查看了
DATEFROMPARTS
,链接编辑您的问题并提供示例数据和所需结果。在处理日期和字符串时,为什么要使用位运算符(&
)?您使用的是什么版本的SQL Server?Server 2008,MSMS 2016尝试打印日期并检查正在设置的日期。我用探查器捕捉到了它。输出似乎正常:exec SSRS_SP_Report_ticketrsales@DateFrom='2017-05-01 00:00:00',@DateTo='2017-05-31 00:00:00',因此日期设置正确。然后,请检查程序的其余部分以了解问题。还有一件事是使用DateTime而不是Date,这样DateTo应该覆盖到23:59:59而不是00:00:00。既然日期设置正确,我想你可以接受这个答案。