用动态日期参数执行存储过程 - 转换错误

时间:2017-10-06 14:17:12

标签: tsql sql-server-2012 ssms dateadd sql-convert

我正在尝试使用动态日期参数执行以下存储过程,以便它在6个月前到达昨天。

当我在具有美国语言设置的服务器上运行时,无论我在使用英语语言设置的服务器上运行时,我都会收到错误:

  

从字符串

转换日期和/或时间时转换失败

我已经尝试将日期转换为YYYYMMDD,因为这适用于所有服务器但是我无法 - 我甚至试图强制进入VARCHAR但没有运气:(

有没有办法让日期为YYYYMMDD格式?希望你能帮忙。

USE Reports

DECLARE @DteStart   DATETIME2(3)
DECLARE @DteEnd     DATETIME2(3)
SELECT  @DteStart = DATEADD(MM, DATEDIFF(MM, 0, CONVERT(DATE,GETDATE(),103))-6,0)
SELECT  @DteEnd   = DATEADD(DD, DATEDIFF(DD, 0, CONVERT(DATE,GETDATE(),103))-1,0)
EXEC [dbo].[spReportsMyData] @DteStart, @DteEnd; 

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

Declare 
    @StartDate as Date
    , @EndDate as Date

Set @EndDate = DateAdd(Day, -1, Getdate())
Set @StartDate = DateAdd(Month, -6, @EndDate)

Select 
    Convert(VARCHAR(10), @StartDate, 112) As StartDate
    , CONVERT(VARCHAR(10), @EndDate, 112) As EndDate

您的存储过程是否真的需要YYYYMMDD格式的日期?