我有一个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))
任何人都知道为什么?
答案 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))