2013-07-23 29 views
0

我有一个SP,它需要计算一些日期&时间。当语言设置为英语时,它工作正常。然而,当它是法语的时候,它有这个错误:使用法语时DATEADD错误?

La conversion d'un type dedonnéesvarchar en type dedonnéesdatetime acrééune valeur 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, -(@[email protected]), CONVERT(VARCHAR(10),GETDATE(),111)) 
PRINT DATEADD(day, -(@[email protected]), CAST('2013-07-23' AS DATE)) 

如果我运行它,结果是:

乐paramètre德索绪尔EST过时à的问题。

2013年7月23日

2013年7月23日

消息242,级别16,状态3,行16 拉转换科特迪瓦联合国型号德最近搜索VARCHAR类型的连接德最近搜索DATETIME一个CREE无价的限制。

2013年6月23日

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

任何人都知道为什么?

+0

亲爱的,你为什么在VARCHAR转换(10)你GETDATE时DATEADD想要的datetime/smalldatetime的作为第三个参数? –

+0

作为字符串处理日期(时间)几乎总是这种错误的来源。如果你想从日期时间中删除时间部分,有很多解决方案不需要转换到'varchar'。 –

回答

1

尝试这样

SET LANGUAGE FRENCH 
SET DATEFORMAT ymd 
GO 
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, -(@[email protected]), CAST(GETDATE() AS Date)) 
PRINT DATEADD(day, -(@[email protected]), CAST('2013-07-23' AS DATE))