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

WEEK() Eksempler – MySQL

I MySQL kan du bruge WEEK() funktion for at få ugenummeret for en given dato. Med "ugenummer" mener jeg årets uge.

For at bruge funktionen skal du blot angive datoen som et argument, og ugenummeret vil blive returneret.

Du har også mulighed for at angive, om ugen skal starte søndag eller mandag, og om ugen skal være i intervallet 0 til 53 eller 1 til 53.

Syntaks

Syntaksen ser sådan ud:

WEEK(date[,mode])

Hvor:

  • date er den dato, du vil have ugenummeret returneret fra.
  • mode er et tal, der angiver, om ugen skal starte søndag eller mandag, og om ugen skal være i intervallet 0 til 53 eller 1 til 53. Se tabellen nedenfor for de mulige tilstandsværdier.

Eksempel 1 – Grundlæggende brug

Her er et eksempel til at demonstrere.

SELECT WEEK('2021-01-25') As 'Week Number';

Resultat:

+-------------+
| Week Number |
+-------------+
|           4 |
+-------------+

Her er et eksempel med en dato nær slutningen af ​​året.

SELECT WEEK('2021-12-25') As 'Week Number';

Resultat:

+-------------+
| Week Number |
+-------------+
|          51 |
+-------------+

Eksempel 2 – Angiv en tilstand

Hvis du ikke angiver et andet argument, er WEEK() funktionen bruger tilstanden som angivet af default_week_format systemvariabel. Standardværdien for denne variabel er 0 .

Du har dog også mulighed for at angive et andet argument for at angive, hvilken tilstand der skal bruges. Eksempel:

SELECT WEEK('2019-10-17', 7) AS 'Mode 7';

Resultat:

+--------+
| Mode 7 |
+--------+
|     41 |
+--------+

De mulige tilstandsværdier er som følger.

Tilstand Første dag i ugen Rækkevidde Uge 1 er den første uge …
0 søndag 0-53 med en søndag i år
1 mandag 0-53 med 4 eller flere dage i år
2 søndag 1-53 med en søndag i år
3 mandag 1-53 med 4 eller flere dage i år
4 søndag 0-53 med 4 eller flere dage i år
5 mandag 0-53 med en mandag i år
6 søndag 1-53 med 4 eller flere dage i år
7 mandag 1-53 med en mandag i år

For tilstandsværdier, hvor uge 1 er den første uge "med 4 eller flere dage i år", er uger nummereret i henhold til ISO 8601:1988:

  • Hvis ugen med 1. januar har 4 eller flere dage i det nye år, er det uge 1.
  • Ellers er det sidste uge i det foregående år, og den næste uge er uge 1.

Eksempel 3 – Sammenligning af tilstande

Her er en hurtig sammenligning af, hvordan du kan få forskellige resultater afhængigt af den anvendte tilstand.

De følgende tre eksempler bruger den samme kode, men med tre forskellige datoer. Disse datoer er fortløbende – de finder sted den 5., 6. og 7. januar. Som du kan se, kan resultaterne være ret forskellige afhængigt af den nøjagtige dato og den anvendte tilstand.

Dato 1

SET @date = '2019-01-05';
SELECT 
  WEEK(@date, 0) AS 'Mode 0',
  WEEK(@date, 1) AS 'Mode 1',
  WEEK(@date, 2) AS 'Mode 2',
  WEEK(@date, 3) AS 'Mode 3',
  WEEK(@date, 4) AS 'Mode 4',
  WEEK(@date, 5) AS 'Mode 5',
  WEEK(@date, 6) AS 'Mode 6',
  WEEK(@date, 7) AS 'Mode 7';

Resultat:

+--------+--------+--------+--------+--------+--------+--------+--------+
| Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      0 |      1 |     52 |      1 |      1 |      0 |      1 |     53 |
+--------+--------+--------+--------+--------+--------+--------+--------+

Dato 2

SET @date = '2019-01-06';
SELECT 
  WEEK(@date, 0) AS 'Mode 0',
  WEEK(@date, 1) AS 'Mode 1',
  WEEK(@date, 2) AS 'Mode 2',
  WEEK(@date, 3) AS 'Mode 3',
  WEEK(@date, 4) AS 'Mode 4',
  WEEK(@date, 5) AS 'Mode 5',
  WEEK(@date, 6) AS 'Mode 6',
  WEEK(@date, 7) AS 'Mode 7';

Resultat:

+--------+--------+--------+--------+--------+--------+--------+--------+
| Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      1 |      1 |      1 |      1 |      2 |      0 |      2 |     53 |
+--------+--------+--------+--------+--------+--------+--------+--------+

Dato 3

SET @date = '2019-01-07';
SELECT 
  WEEK(@date, 0) AS 'Mode 0',
  WEEK(@date, 1) AS 'Mode 1',
  WEEK(@date, 2) AS 'Mode 2',
  WEEK(@date, 3) AS 'Mode 3',
  WEEK(@date, 4) AS 'Mode 4',
  WEEK(@date, 5) AS 'Mode 5',
  WEEK(@date, 6) AS 'Mode 6',
  WEEK(@date, 7) AS 'Mode 7';

Resultat:

+--------+--------+--------+--------+--------+--------+--------+--------+
| Mode 0 | Mode 1 | Mode 2 | Mode 3 | Mode 4 | Mode 5 | Mode 6 | Mode 7 |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      1 |      2 |      1 |      2 |      2 |      1 |      2 |      1 |
+--------+--------+--------+--------+--------+--------+--------+--------+

  1. FOR XML PATH(''):Escapende specialtegn

  2. MySQL-ydelse:MyISAM vs InnoDB

  3. Overvågning af dine databaser med MySQL Enterprise Monitor

  4. Sådan rettes "Procedure forventer parameter '@statement' af typen 'ntext/nchar/nvarchar'." Fejl i SQL Server