sql >> Database teknologi >  >> RDS >> Mysql

Er timestampdiff() i MySQL ækvivalent med datediff() i SQL Server?

Jeg tror, ​​at dette kan være forårsaget af en af ​​2 ting:

  • Hvad er klassificeret som den første dag i ugen mellem din SQL Server og MySQL-instanser.
  • Hvordan uger tælles mellem SQL Server og MySQL

Din angivne dato 2012-09-01 falder på en lørdag, hvilket ser ud til at udelukke ugens startdag, som normalt er søndag eller mandag.

MySQL har en standard startdag på:0 (Sunday)

For at finde ud af din SQL Server-start på ugen kan du bruge @ @DATEFIRST ved at køre denne:

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

Du kan ændre din beregning til at arbejde på dage i stedet for uger og dividere med 7 for at få en mere nøjagtig værdi, som du kan afrunde som du vil:

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 runde det op eller ned afhængigt af, om du vil matche dit tidligere resultat eller tælle det som en ekstra weekend.

SQL Server ser ud til at tælle antallet af søndage (hvis det er starten på ugen) mellem 2 datoer som vist med dette eksempel på violin hvor jeg har ændret datointervallet til at være 2 dage, en lørdag og en søndag:

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

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

Hvor de samme værdier i MySQL kun ser ud til at tælle hele 7 dage som en uge som vist i denne demofiolin :

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

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

Det er først, når der går hele 7 dage, du får resultatet på 1, som du kan se i denne demo violin :

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

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



  1. Sådan får du Dato fra et resultatsæt

  2. Hvordan nulstiller man den glemte MySQL root-adgangskode?

  3. Brug NEWSEQUENTIALID() til at oprette en inkrementerende GUID i SQL Server

  4. Hvordan kan jeg med PDO sikre mig, at en UPDATE-erklæring var vellykket?