Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Czy timestampdiff() w MySQL jest odpowiednikiem datediff() w SQL Server?

Myślę, że może to być spowodowane jedną z dwóch rzeczy:

  • Co jest klasyfikowane jako pierwszy dzień tygodnia między instancjami SQL Server i MySQL.
  • Jak liczone są tygodnie między SQL Server a MySQL

Twoja podana data 2012-09-01 wypada w sobotę, co wydaje się wykluczać dzień rozpoczęcia tygodnia, którym zwykle jest niedziela lub poniedziałek.

MySQL ma domyślny dzień rozpoczęcia:0 (Sunday)

Aby dowiedzieć się o swoim SQL Server na początku tygodnia, możesz użyć @ @DATEFIRST uruchamiając to:

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

Możesz zmienić obliczenia tak, aby działały w dniach, a nie tygodniach, i podzielić przez 7, aby uzyskać dokładniejszą wartość, którą możesz zaokrąglić według własnego uznania:

MySQL:Pokaz SQL Fiddle

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


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

Serwer SQL:Pokaz SQL Fiddle :

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

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

Możesz zaokrąglić to w górę lub w dół, w zależności od tego, czy chcesz dopasować swój poprzedni wynik, czy liczyć go jako dodatkowy weekend.

SQL Server wydaje się liczyć niedziele (jeśli jest to początek tygodnia) między 2 datami, jak pokazano za pomocą te przykładowe skrzypce gdzie zmieniłem zakres dat na 2 dni, sobotę i niedzielę:

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

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

Gdzie te same wartości w MySQL wydają się liczyć tylko pełne 7 dni jako tydzień, jak pokazano w te skrzypce demonstracyjne :

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

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

Dopiero po upływie pełnych 7 dni otrzymasz wynik 1, jak widać w tym demo skrzypce :

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

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zapobiegać wstrzykiwaniu SQL w aplikacjach LAMP?

  2. Dlaczego użycie IN(...) podczas wybierania pól indeksowanych zabije wydajność zapytania SELECT?

  3. docker-compose:ponowna inicjalizacja bazy danych MySQL za każdym razem

  4. Rozwiązywanie problemów z replikacją MySQL:część druga

  5. mysql wybierz najwyższe n maksymalne wartości