Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist timestampdiff() in MySQL äquivalent zu datediff() in SQL Server?

Ich denke, dies könnte durch eines von 2 Dingen verursacht werden:

  • Was als erster Tag der Woche zwischen Ihren SQL Server- und MySQL-Instanzen klassifiziert wird.
  • Wie Wochen zwischen SQL Server und MySQL gezählt werden

Ihr angegebenes Datum 2012-09-01 fällt auf einen Samstag, was den Starttag der Woche, der normalerweise Sonntag oder Montag ist, auszuschließen scheint.

MySQL hat einen Standardstarttag von:0 (Sunday)

Um Ihren SQL Server-Wochenstart herauszufinden, können Sie @ @DATEFIRST indem Sie Folgendes ausführen:

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

Sie können Ihre Berechnung so ändern, dass sie auf Tage anstatt auf Wochen berechnet und durch 7 dividiert wird, um einen genaueren Wert zu erhalten, den Sie nach Belieben runden können:

MySQL:SQL-Fiddle-Demo

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


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

SQL Server:SQL-Fiddle-Demo :

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

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

Sie können das auf- oder abrunden, je nachdem, ob Sie mit Ihrem vorherigen Ergebnis übereinstimmen oder es als zusätzliches Wochenende zählen möchten.

SQL Server scheint die Anzahl der Sonntage (wenn das der Wochenbeginn ist) zwischen 2 Daten zu zählen, wie mit diese Beispielgeige wobei ich den Datumsbereich auf 2 Tage, einen Samstag und einen Sonntag geändert habe:

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

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

Wobei dieselben Werte in MySQL nur volle 7 Tage als Woche zu zählen scheinen, wie in gezeigt diese Demo-Geige :

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

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

Nur wenn volle 7 Tage vergangen sind, erhalten Sie das Ergebnis 1, wie Sie in dieser Demo sehen können Geige :

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

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