2017-10-06 64 views
1

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

当我与美国英语语言设置的服务器时,它的工作原理然而,当我与英国语言设置一台服务器上运行上运行我的错误:

Conversion failed when converting date and/or time from character string

我试图日期转换为年月日,因为这作品不过,我一直无法在所有服务器上 - 我甚至试图强行进入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; 
+0

该代码是产品特定的。标记您正在使用的dbms。 – jarlh

+0

如果在所有适当的位置使用['Date'](https://docs.microsoft.com/en-us/sql/t-sql/data-types/date-transact-sql)数据类型应该不成问题。摆弄你不想要的字符和字符串表示是疯狂的方式。 PSA:[ISO日期格式](https://xkcd.com/1179/)。 – HABO

+0

我无法复制它?什么'language'正在使用? – gotqn

回答

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格式有关系吗?

+0

根据以上评论代码现在工作 - 谢谢你的答案:) – Baseline9