Reputation: 6605
I have a SP which needs to calculate some date & time. It works fine when the language is set as English. However, when it is French, it has this error:
La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
Which means datetime overflow based on translation.
The query is similar to:
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))
If I run it, the result is:
Le paramètre de langue est passé à Français.
2013/07/23
2013-07-23
Msg 242, Level 16, State 3, Line 16 La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites.
2013-06-23
the error happens at: PRINT DATEADD(day, -(@PastDays+@StartPastDays-1), CONVERT(VARCHAR(10),GETDATE(),111) )
Anyone knows why?
Upvotes: 0
Views: 561
Reputation: 7753
DATEADD
requires a Date, so just pass GETDATE()
or 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))
Upvotes: 1