使用法语时DATEADD错误?

时间:2013-07-23 20:56:45

标签: sql-server sql-server-2008

我有一个SP需要计算一些日期&时间。当语言设置为英语时,它工作正常。但是,当它是法语时,它有这个错误:

La conversion d'un typededonnéesvarcharen typededonnéesdatetimeacrééunevaleur hors limites。

这意味着基于翻译的日期时间溢出。

查询类似于:

SET LANGUAGE  'French'

DECLARE @StartPastDays INT
SET @StartPastDays = 1;

DECLARE @PastDays INT
SET @PastDays = 30;

PRINT CONVERT(VARCHAR(10),GETDATE(),111)
PRINT CONVERT(DATE,GETDATE(),111)
PRINT DATEADD(day, -(@PastDays+@StartPastDays-1), CONVERT(VARCHAR(10),GETDATE(),111) )
PRINT DATEADD(day, -(@PastDays+@StartPastDays-1), CAST('2013-07-23' AS DATE))

如果我运行它,结果是:

LeparamètredelangueestpasséàFrançais。

2013年7月23日

2013年7月23日

Msg 242,Level 16,State 3,Line 16 La conversion d'un typededonnéesvarcharen typededonnéesdatetimeacrééunevaleur hors limites。

2013年6月23日

错误发生在: PRINT DATEADD(日, - (@ PastDays + @ StartPastDays-1),CONVERT(VARCHAR(10),GETDATE(),111))

任何人都知道为什么?

2 个答案:

答案 0 :(得分:1)

试试这个

SET LANGUAGE  FRENCH
SET DATEFORMAT ymd
GO

答案 1 :(得分:1)

DATEADD需要日期,因此只需传递GETDATE()CAST(GETDATE() AS DATE)

SET LANGUAGE  'French'

DECLARE @StartPastDays INT
SET @StartPastDays = 1;

DECLARE @PastDays INT
SET @PastDays = 30;

PRINT CONVERT(VARCHAR(10),GETDATE(),111)
PRINT CONVERT(DATE,GETDATE(),111)
PRINT DATEADD(day, -(@PastDays+@StartPastDays-1), CAST(GETDATE() AS Date))
PRINT DATEADD(day, -(@PastDays+@StartPastDays-1), CAST('2013-07-23' AS DATE))