Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O timestampdiff() no MySQL é equivalente ao datediff() no SQL Server?


Eu acho que isso pode ser causado por uma das 2 coisas:
  • O que é classificado como o primeiro dia da semana entre as instâncias do SQL Server e do MySQL.
  • Como as semanas são contadas entre o SQL Server e o MySQL

Sua data especificada 2012-09-01 cai em um sábado, o que parece descartar o dia de início da semana, que geralmente é domingo ou segunda-feira.

O MySQL tem um dia de início padrão de:0 (Sunday)

Para descobrir o início da semana do seu SQL Server, você pode usar @ @DATEFIRST executando isso:
select @@DATEFIRST -- default US English = 7 (Sunday)

Você pode alterar seu cálculo para trabalhar em dias em vez de semanas e dividir por 7 para obter um valor mais preciso, que você pode arredondar como quiser:

MySQL:Demonstração do SQL Fiddle
SELECT TIMESTAMPDIFF(DAY, '2012-09-01', '2014-10-01')/7 AS NoOfWeekends1


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

SQL Server:Demonstração do SQL Fiddle :
SELECT DATEDIFF(d,'2012-09-01','2014-10-01')/7.0 AS NoOfWeekends1

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

Você pode arredondar para cima ou para baixo, dependendo se deseja igualar seu resultado anterior ou contá-lo como um fim de semana extra.

O SQL Server parece contar o número de domingos (se for o início da semana) entre 2 datas, conforme mostrado com este exemplo de violino onde alterei o intervalo de datas para 2 dias, um sábado e um domingo:
SELECT DATEDIFF(wk,'2012-09-01','2012-09-02') AS NoOfWeekends1

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

Onde os mesmos valores no MySQL parecem contar apenas 7 dias completos como uma semana, conforme mostrado em este violino de demonstração :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-02') AS NoOfWeekends1

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

É somente quando 7 dias completos se passam, você obtém o resultado de 1, como você pode ver esta demonstração violino :
SELECT TIMESTAMPDIFF(WEEK, '2012-09-01', '2012-09-08') AS NoOfWeekends1

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