sql >> Base de Datos >  >> RDS >> Mysql

¿Timestampdiff() en MySQL es equivalente a dateiff() en SQL Server?

Creo que esto podría deberse a una de dos cosas:

  • Qué se clasifica como el primer día de la semana entre sus instancias de SQL Server y MySQL.
  • Cómo se cuentan las semanas entre SQL Server y MySQL

Su fecha dada 2012-09-01 cae en sábado, lo que parece descartar el día de inicio de la semana, que suele ser domingo o lunes.

MySQL tiene un día de inicio predeterminado de:0 (Sunday)

Para averiguar el inicio de semana de su SQL Server, puede usar @ @DATEFIRST ejecutando esto:

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

Puede cambiar su cálculo para trabajar en días en lugar de semanas y dividir por 7 para obtener un valor más preciso, que puede redondear como desee:

MySQL:Demostración de SQL Fiddle

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


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

Servidor SQL:Demostración de SQL Fiddle :

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

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

Puede redondearlo hacia arriba o hacia abajo dependiendo de si desea igualar su resultado anterior o contarlo como un fin de semana adicional.

SQL Server parece contar la cantidad de domingos (si ese es el comienzo de la semana) entre 2 fechas como se muestra con este violín de ejemplo donde he cambiado el intervalo de fechas para que sea de 2 días, un sábado y un domingo:

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

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

Mientras que los mismos valores en MySQL parecen contar solo 7 días completos como una semana, como se muestra en este violín de demostración :

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

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

Solo cuando pasan 7 días completos obtienes el resultado de 1, como puedes ver en esta demostración violín :

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

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