sql >> Databasteknik >  >> RDS >> Mysql

Är timestampdiff() i MySQL ekvivalent med datediff() i SQL Server?

Jag tror att detta kan bero på en av två saker:

  • Vad klassificeras som den första dagen i veckan mellan din SQL Server och MySQL-instanser.
  • Hur räknas veckor mellan SQL Server och MySQL

Ditt angivna datum 2012-09-01 infaller på en lördag, vilket verkar utesluta veckans startdag, som vanligtvis är söndag eller måndag.

MySQL har en standardstartdag på:0 (Sunday)

För att ta reda på din SQL Server början av veckan kan du använda @ @DATEFIRST genom att köra detta:

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

Du kan ändra din beräkning till att arbeta på dagar istället för veckor och dividera med 7 för att få ett mer exakt värde, som du kan avrunda som du vill:

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 |

Du kan avrunda det uppåt eller nedåt beroende på om du vill matcha ditt tidigare resultat eller räkna det som en extra helg.

SQL Server verkar räkna antalet söndagar (om det är början på veckan) mellan 2 datum som visas med denna exempelfiol där jag har ändrat datumintervallet till 2 dagar, en lördag och en söndag:

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

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

Där samma värden i MySQL bara verkar räkna hela 7 dagar som en vecka som visas i denna demofiol :

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

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

Det är först när hela 7 dagar går du får resultatet av 1 som du kan se i denna demo fiol :

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

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



  1. MySQL Välj WHERE IN given ordning

  2. Hur gör man flera LEFT JOINs med ELLER använder ett sammansatt index fullt ut? (del 2)

  3. Välj bland alla tabeller

  4. Hur fungerar parametern 'LIMIT' i sql?