2010-02-01 10 views
10

Dopo che ho visto un sacco di domande qui utilizzando i DATE_SUB() o DATE_ADD() funzioni al posto degli operatori aritmetici + o -, mi chiedevo se ci fosse alcuna differenza:Esiste una differenza tra DATE_SUB() e l'utilizzo di operatori aritmetici per il calcolo datetime?

Citazione dal MySQL-manual:

data l'aritmetica può anche essere eseguita utilizzando INTERVALLO insieme con i tasti + o - operatore:

date + INTERVAL expr unit 
date - INTERVAL expr unit 

Quindi, in pratica, queste due affermazioni restituire lo stesso risultato:

SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); 

e

SELECT NOW() + INTERVAL 7 DAY; 

Ora la mia domanda:

C'è qualche differenza tra il DATE_SUB() e utilizzando l'operatore - in MySQL? (oltre alla leggibilità?)

risposta

4

La documentazione MySQL per DATE_ADD (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add) afferma esplicitamente che si può fare data aritmetica con gli operatori + e -.

Data l'aritmetica può anche essere eseguita utilizzando INTERVALLO insieme con i tasti + o - operatore:

data + INTERVALLO espr unità

data - Unità espr INTERVALLO

Dato che è approvato dai doc, penso che ogni differenza sia stilistica. Personalmente ritengo che il +/- sia più facile da leggere (dopotutto non si usa INT_ADD (...) o DOUBLE_ADD (...) per manipolare valori numerici, quindi perché le date?). Altri potrebbero avere le proprie ragioni per apprezzare DATE_ADD e DATE_SUB, e va bene lo stesso. Basta prendere qualcosa e seguirlo.

Jemiah

3

Per me, è una questione di esperienza. Dopo aver affrontato più editor, librerie e strumenti che manipolano i database, ho imparato a non fidarmi degli operatori "+" e "-" tanto quanto mi fido di DATE_SUB(). È molto meno probabile che qualcosa si spezzi accidentalmente come parte del prossimo aggiornamento del software con DATE_SUB(), rispetto all'utilizzo di +/-

+2

Potrebbe chiarire questo un po '? In tal caso, un editor interromperà la sintassi sql? –

+0

Ad esempio, nei casi in cui il parser è danneggiato, con l'editor SQL che accetta SQL non valido come valido o che indica che SQL valido non è valido e rifiuta di accettarlo. – blueberryfields

Problemi correlati