0

日付と時刻を計算する必要がある SP があります。言語を英語に設定すると問題なく動作します。ただし、フランス語の場合、次のエラーが発生します。

La conversion 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 に答える