2012-02-02 21 views
5

Dopo aver eseguito la seguente interrogazione che sto ottenendo un erroreDateAdd Colonna causato un overflow

Aggiunta di un valore a una colonna 'datetime' causato un overflow.

Non ho idea del motivo per cui questo sta accadendo in quanto ha funzionato senza intoppi per un paio di settimane. Sto solo cercando di aggiungere date qui e confrontarle con la data di inizio e la data di fine con una clausola between.

DATEADD(day, -1 , DATEADD(mm, DATEDIFF(mm,0,posting_date),0)) BETWEEN start_date and end_date 

risposta

7

posso duplicare l'errore con il seguente:

errore
declare @posting_date datetime 
set @posting_date = '1/1/1753' 

select DATEADD(day, -1 , DATEADD(mm, DATEDIFF(mm,0,@posting_date),0)) 

dopo l'esecuzione:

Msg 517, livello 16, stato 1, riga 3 Aggiunta di un valore a un 'datetime' La colonna ha causato un overflow.

Fondamentalmente, posting_date nel caso precedente è il valore minimo consentito data per server SQL. Se poi provi a sottrarre 1 giorno da esso, entra in una condizione di overflow.

La mia ipotesi è che si disponga di un punto dati impostato su SQL Server's minimum date value.

+0

Per me 'DATEADD (giorno, -1, DATEADD (mm, -1753,0))' sembra funzionare, ma 'DATEADD (giorno, -1, DATEADD (mm, -1754,0))' non . – dasblinkenlight

+1

@dasblinkenlight: Bene .. il primo dovrebbe risultare nella data 11/30/1753, che è una data del server SQL valida. Il secondo dovrebbe essere valutato al 31/10/1753. Indipendentemente da ciò, nessuno dei due ha a che fare con la domanda dell'OP – NotMe

+2

Oops, ho fatto un refuso: era -1763 e -1764 (con 6, non 5), quindi la sua chiamata a 'DATEDIFF' restituisce un numero negativo inferiore a -1764, il che significa che il suo 'posting_date' deve essere almeno 1764 mesi prima dell'1/1/1900. Buona pesca. – dasblinkenlight

2

Secondo MSDN:

L'argomento data non può essere incrementata di un valore fuori dell'intervallo dal tipo di dati. Nelle seguenti istruzioni, il valore numerico che viene aggiunto al valore della data supera l'intervallo del tipo di dati della data. Viene restituito il seguente messaggio di errore: "L'aggiunta di un valore a una colonna" datetime " ha causato un overflow."

Qual è il tipo di dati della colonna e gli intervalli di start_date e end_date?

Problemi correlati