Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-ce que timestampdiff() dans MySQL est équivalent à datediff() dans SQL Server ?

Je pense que cela pourrait être causé par l'une des 2 choses suivantes :

  • Ce qui est classé comme le premier jour de la semaine entre vos instances SQL Server et MySQL.
  • Comment les semaines sont comptées entre SQL Server et MySQL

Votre date indiquée 2012-09-01 tombe un samedi, ce qui semble exclure le jour de début de la semaine, qui est généralement le dimanche ou le lundi.

MySQL a un jour de début par défaut :0 (Sunday)

Pour connaître votre début de semaine SQL Server, vous pouvez utiliser @ @DATEFIRST en exécutant ceci :

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

Vous pouvez modifier votre calcul pour travailler sur des jours plutôt que sur des semaines et diviser par 7 pour obtenir une valeur plus précise, que vous pouvez arrondir à votre guise :

MySQL :Démo SQL Fiddle

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


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

SQL Server :Démo SQL Fiddle :

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

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

Vous pouvez arrondir ce chiffre à la hausse ou à la baisse selon que vous souhaitez égaler votre résultat précédent ou le compter comme un week-end supplémentaire.

SQL Server semble compter le nombre de dimanches (si c'est le début de la semaine) entre 2 dates comme indiqué avec cet exemple de violon où j'ai changé la plage de dates pour qu'elle soit de 2 jours, un samedi et un dimanche :

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

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

Alors que les mêmes valeurs dans MySQL semblent ne compter que 7 jours complets comme une semaine, comme indiqué dans ce violon de démonstration :

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

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

Ce n'est que lorsqu'un pass complet de 7 jours que vous obtenez le résultat de 1 comme vous pouvez le voir dans cette démo violon :

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

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