Domanda

Ho bisogno di calcolare le settimane fuori da una data nel mio MySQL select. C'è una colonna di data in uno dei tavoli, e ho bisogno di calcolare quanti settimane di distanza la data è.

SELECT EventDate, (calculation) AS WeeksOut FROM Events;

Esempio:

  • 6 giorni di distanza, settimane out = 0
  • 7 giorni di distanza, settimane out = 1
  • 13 giorni di distanza, settimane out = 1
  • 14 giorni di distanza, settimane out = 2
È stato utile?

Soluzione

Utilizzare la funzione di href="http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff" rel="nofollow DATEDIFF :

ROUND(DATEDIFF(end_date, start_date)/7, 0) AS weeksout

Il problema con SETTIMANE è che non restituisca risultati corretti per le date che si incrociano 1 ° gennaio.

Il 0 è il numero di cifre decimali da utilizzare nel ROUND funzione.

Altri suggerimenti

Ecco un modo semplice per farlo:

SELECT EventDate, (week(EventDate) - week(curdate())) AS WeeksOut FROM Events;

Esempio:

mysql> select week('2010-11-18') - week ('2010-10-18');
+------------------------------------------+
| week('2010-11-18') - week ('2010-10-18') |
+------------------------------------------+
|                                        4 |
+------------------------------------------+
1 row in set (0.00 sec)

Un'altra opzione è quella di calcolare l'intervallo in giorni e dividere per 7:

SELECT EventDate, datediff(EventDate,curdate())/7 AS WeeksOut FROM Events;

Esempio:

mysql> select datediff('2010-11-18' , '2010-10-18') / 7;
+-------------------------------------------+
| datediff('2010-11-18' , '2010-10-18') / 7 |
+-------------------------------------------+
|                                    4.4286 |
+-------------------------------------------+
1 row in set (0.00 sec)

Al fine di superare l'intera questione "Anno Nuovo" e si vuole ancora utilizzare WEEK() , ho trovato il seguente metodo molto efficace.

SELECT 
    YEAR(end_date)*52+WEEK(end_date)
    - YEAR(start_date)*52 - WEEK(start_date) as weeks_out
FROM
    events;

La differenza con questo metodo (a differenza del metodo DATEDIFF) è che esso sia allineato con la settimana. Così oggi (che è Lunedi) e Venerdì scorso sarebbero tornati 1 con questo metodo, ma sarebbero tornati 0 con il metodo DATEDIFF

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top