sql >> Database teknologi >  >> RDS >> Sqlserver

Returner ISO-ugenummeret fra en dato i SQL Server (T-SQL)

Hvis du har brug for at udtrække ISO-ugenummeret fra en dato i SQL Server, kan du bruge iso_week argument, når du kalder DATEPART() fungere. Du kan alternativt bruge isowk eller isoww argumenter for at gøre det samme.

Med "ISO uge" refererer jeg til ISO 8601 dato- og klokkeslætsstandarden.

ISO-uger starter om mandagen, og den første uge i et år indeholder den 4. januar det pågældende år. Derfor er det muligt, at datoer i begyndelsen af ​​januar er en del af den 52. eller 53. uge i det foregående år, og at datoer i slutningen af ​​december er en del af den første uge i det næste år.

Det betyder, at når du uddrager ugenummeret fra en dato, kan du få forskellige resultater, afhængigt af om du bruger den gregorianske kalender eller ISO 8601 dato- og klokkeslætsstandarden.

Eksempel

DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);

Resultat:

53

I dette tilfælde er datoen 1. januar 2021, men i ISO-sammenhæng er det den 53. uge i 2020.

Sammenligning med gregoriansk

Her er endnu et eksempel for at sammenligne det med den gregorianske uge.

DECLARE @date date = '2021-01-01';
SELECT 
  DATEPART(week, @date) AS week,
  DATEPART(iso_week, @date) AS iso_week;

Resultat:

+--------+------------+
 | week   | iso_week   |
 |--------+------------|
 | 1      | 53         |
 +--------+------------+ 

Så vi kan se, at den samme dato kan have et andet ugenummer afhængigt af, om vi bruger den gregorianske kalender eller ISO-standarden.

Vi kan gøre det samme med en dato tæt på slutningen af ​​det foregående år.

DECLARE @date date = '2020-12-27';
SELECT 
  DATEPART(week, @date) AS week,
  DATEPART(iso_week, @date) AS iso_week;

Resultat:

+--------+------------+
 | week   | iso_week   |
 |--------+------------|
 | 53     | 52         |
 +--------+------------+ 

Alternative argumenter

Som nævnt kan alternativt bruge isowk eller isoww for at returnere ISO-ugenummeret.

DECLARE @date date = '2021-01-01';
SELECT 
    DATEPART(iso_week, @date) AS iso_week,
    DATEPART(isowk, @date) AS isowk,
    DATEPART(isoww, @date) AS isoww;

Resultat:

+------------+---------+---------+
 | iso_week   | isowk   | isoww   |
 |------------+---------+---------|
 | 53         | 53      | 53      |
 +------------+---------+---------+ 

  1. SQL AVG() for begyndere

  2. Sammenligning af strengopdelings-/sammenkædningsmetoder

  3. Gør postgres datorepræsentation til ISO 8601-streng

  4. MySQL Trigger kun efter opdatering, hvis rækken er ændret