2013-07-23 35 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))