Mysql
 sql >> Database >  >> RDS >> Mysql

Timestampdiff() in MySQL è equivalente a datediff() in SQL Server?

Penso che questo potrebbe essere causato da una delle 2 cose:

  • Quello che viene classificato come il primo giorno della settimana tra le istanze SQL Server e MySQL.
  • Come vengono contate le settimane tra SQL Server e MySQL

La data indicata 2012-09-01 cade di sabato, il che sembra escludere il giorno di inizio della settimana, che di solito è domenica o lunedì.

MySQL ha un giorno di inizio predefinito di:0 (Sunday)

Per scoprire il tuo SQL Server all'inizio della settimana puoi utilizzare @ @DATEFIRST eseguendo questo:

select @@DATEFIRST -- default US English = 7 (Sunday)

Puoi modificare il calcolo in modo che funzioni su giorni anziché su settimane e dividendo per 7 per ottenere un valore più accurato, che puoi arrotondare a tuo piacimento:

MySQL:Demo di SQL Fiddle

SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1


| NOOFWEEKENDS1 |
|---------------|
|      108.5714 |

SQL Server:Demo di SQL Fiddle :

SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|    108.571428 |

Puoi arrotondarlo per eccesso o per difetto a seconda se desideri abbinare il tuo risultato precedente o contarlo come un fine settimana in più.

SQL Server sembra contare il numero di domeniche (se è l'inizio della settimana) tra 2 date, come mostrato con questo esempio di violino dove ho modificato l'intervallo di date in 2 giorni, un sabato e una domenica:

SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|             1 |

Mentre gli stessi valori in MySQL sembrano contare solo 7 giorni interi come una settimana, come mostrato in questo violino demo :

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|             0 |

È solo quando trascorrono 7 giorni interi ottieni il risultato di 1 come puoi vedere in questa demo violino :

SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1

| NOOFWEEKENDS1 |
|---------------|
|             1 |