0

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

La convert d'un type de données varchar en type de données datetime a créé 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, -(@PastDays+@StartPastDays-1), CONVERT(VARCHAR(10),GETDATE(),111) )
PRINT DATEADD(day, -(@PastDays+@StartPastDays-1), CAST('2013-07-23' AS DATE))

如果我运行它,结果是:

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

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

有谁知道为什么?

4

2 回答 2

1

试试这样

SET LANGUAGE  FRENCH
SET DATEFORMAT ymd
GO
于 2013-07-23T21:02:20.963 回答
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))
于 2013-07-24T12:44:49.550 回答