【问题标题】:Dynamic date parameter in stored procedure存储过程中的动态日期参数
【发布时间】:2018-01-27 16:00:51
【问题描述】:

我试图在我的存储过程中将上个月的第一天和最后一天作为日期参数传递,但它会引发如下数据转换错误:

从字符串转换日期和/或时间时转换失败。

这是我如何传递参数的示例;

EXEC DBO.usp_PRODUCTS 'DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0)'
                            ,'DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), -1)'

我的存储过程中开始日期和结束日期的数据类型是 date ,即使我更改为 varchar,它也会显示类似的错误。

有什么方法可以将上个月的第一天和最后一天作为参数传递到我的存储过程中?

【问题讨论】:

    标签: sql sql-server tsql stored-procedures type-conversion


    【解决方案1】:

    试试这个

    Declare @startDate Date = DATEADD(month, DATEDIFF(month,0,GETDATE())- 1, 0);
    Declare @endDate   Date = DATEADD(month, DATEDIFF(month,0,GETDATE())   , 0);
    
    EXEC DBO.usp_PRODUCTS @startDate , @endDate  ;
    

    【讨论】:

      【解决方案2】:

      如果您使用的是 SQLServer 2012 或更高版本,则可以使用 EOMonth 函数返回该月的最后一天,上个月的偏移量为 -1:

      EXEC DBO.usp_PRODUCTS 
          DateAdd(day,1,EOMonth(GetDate(),-2)),
          EOMonth(GetDate(),-1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-10
        • 2016-05-13
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 1970-01-01
        相关资源
        最近更新 更多