Aritmetica di data

I valori delle date possono essere sottratti, incrementati o decrementati.

Sottrazione di date : il risultato della sottrazione di una data ( DATE2 ) da un'altra ( DATE1 ) è una durata che specifica il numero di anni, mesi e giorni tra le due date. Il tipo di dati del risultato è DECIMAL(8,0). Se DATE1 è maggiore o uguale a DATE2, DATE2 viene sottratto da DATE1. DATE1 Se DATE2 è minore di DATE2, tuttavia, DATE1 viene sottratto da e il segno del risultato viene reso negativo. La seguente descrizione della procedura chiarisce i passaggi coinvolti nell'operazione RISULTATO = DATE1 - DATE2.

Sottrazione di date: risultato = date1 - date2
  • Se DAY(DATE2) <= DAY(DATE1) allora DAY(RESULT) = DAY(DATE1) - DAY(DATE2)
  • If DAY(DATE2) > DAY(DATE1) then DAY(RESULT) = N + DAY(DATE1) - DAY(DATE2) where N = the last day of MONTH(DATE2). MONTH(DATE2) viene quindi incrementato di 1.
  • Se MONTH(DATE2) <= MONTH(DATE1) allora MONTH(RESULT) = MONTH(DATE1) - MONTH(DATE2)
  • Se MONTH(DATE2) > MONTH(DATE1) allora MONTH(RESULT) = 12 + MONTH(DATE1) - MONTH(DATE2) e YEAR(DATE2) viene incrementato di 1.
  • YEAR(RESULT) = YEAR(DATE1) - YEAR(DATE2)

Ad esempio, il risultato di DATE('3/15/2005') - '12/31/2004' è 215 (o una durata di 0 anni, 2 mesi e 15 giorni). In questo esempio, si noti che il secondo operando non ha bisogno di essere convertito in una data. Secondo una delle regole per la sottrazione, descritta in Aritmetica datetime in SQL, il secondo operando può essere una rappresentazione stringa di una data se il primo operando è una data.

Incrementare e decrementare le date : il risultato dell'aggiunta di una durata a una data o della sottrazione di una durata da una data è esso stesso una data. (Ai fini di questa operazione, un mese equivale a una pagina di calendario. Aggiungere mesi a una data, quindi, è come girare le pagine di un calendario, iniziando dalla pagina in cui compare la data Il risultato deve essere compreso tra il 1° gennaio 0001 e il 31 dicembre 9999 inclusi. Se si aggiunge o si sottrae una durata di anni, viene modificata solo la parte dell'anno della data. Il mese rimane invariato, così come il giorno, a meno che il risultato non sia il 29 febbraio di un anno non bisestile. Qui la porzione giornaliera del risultato è impostata su 28 e il campo " SQLWARN6 " dell'SQLCA è impostato su W, indicando che è stata effettuata una rettifica di fine mese per correggere una data non valida. La descrizione dei campi SQLCA descrive anche come impostare SQLWARN6.

Allo stesso modo, se si aggiunge o si sottrae una durata di mesi, vengono modificati solo i mesi e, se necessario, gli anni. La parte del giorno della data rimane invariata a meno che il risultato non sia invalido (ad esempio il 31 settembre). In questo caso il giorno è impostato sull'ultimo giorno del mese e il campo " SQLWARN6 " dell'SQLCA è impostato su W per indicare l'adeguamento.

Aggiungere o sottrarre una durata di giorni influirà, ovviamente, sulla porzione di giorno della data e potenzialmente sul mese e sull'anno. L'aggiunta o la sottrazione di una durata in giorni non causerà un adeguamento di fine mese.

Le durate delle date, siano esse positive o negative, possono anche essere sommate e sottratte dalle date. Come per le durate etichettate, il risultato è una data valida e SQLWARN6 è impostato su W per indicare qualsiasi adeguamento di fine mese necessario.

Quando a una data viene aggiunta una durata positiva o da una data viene sottratta una durata negativa, la data viene incrementata del numero specificato di anni, mesi e giorni, in questo ordine. Pertanto, DATA1+X, dove X è un numero DECIMALE(8,0) positivo, equivale all'espressione:
  DATE1 + YEAR(X) YEARS + MONTH(X) MONTHS + DAY(X) DAYS
Quando una data positiva viene sottratta da una data, o una data negativa viene aggiunta a una data, la data viene decrementata del numero specificato di giorni, mesi e anni, in questo ordine. Pertanto, DATA1-X, dove X è un numero DECIMALE(8,0) positivo, equivale all'espressione:
  DATE1 - DAY(X) DAYS - MONTH(X) MONTHS - YEAR(X) YEARS

Aggiungere un mese a una data dà lo stesso giorno un mese dopo, a meno che quel giorno non esista nel mese successivo. In tal caso, il giorno nel risultato è impostato sull'ultimo giorno del mese successivo. Ad esempio, il 28 gennaio più un mese dà il 28 febbraio; un mese aggiunto al 29, 30 o 31 gennaio dà il 28 febbraio o, per un anno bisestile, il 29 febbraio. Se a una data data si aggiunge uno o più mesi e poi si sottrae lo stesso numero di mesi dal risultato, la data finale non è necessariamente la stessa della data originale.

Se a una data data vengono aggiunti uno o più mesi e poi dallo stesso numero di mesi viene sottratto il risultato, la data finale non è necessariamente la stessa della data originale. Inoltre, espressioni logicamente equivalenti potrebbero non produrre lo stesso risultato. Ad esempio, le due espressioni seguenti non producono lo stesso risultato:
   (DATE('2005 01 31') + 1 MONTH) + 1 MONTH    -- results in 2005-03-28 
   DATE('2005 01 31') + 2 MONTHS               -- results in 2005-03-31
L'ordine in cui le durate delle date etichettate vengono aggiunte e sottratte alle date può influire sui risultati. Quando si aggiungono durate di date etichettate a una data, specificarle nell'ordine ANNI + MESI + GIORNI. Quando si sottraggono le durate delle date etichettate da una data, specificarle nell'ordine GIORNI - MESI - ANNI. Ad esempio, per aggiungere un anno e un giorno a una data, specificare:
  DATE1 + 1 YEAR + 1 DAY
Per sottrarre un anno, un mese e un giorno da una data, specificare:
  DATE1 - 1 DAY - 1 MONTH - 1 YEAR