Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zwróć numer tygodnia ISO z daty w SQL Server (T-SQL)

Jeśli chcesz wyodrębnić numer tygodnia ISO z daty w SQL Server, możesz użyć iso_week argument podczas wywoływania DATEPART() funkcjonować. Możesz alternatywnie użyć isowk lub isoww argumenty, aby zrobić to samo.

Przez „tydzień ISO” mam na myśli standard daty i czasu ISO 8601.

Tygodnie ISO zaczynają się w poniedziałki, a pierwszy tydzień roku zawiera 4 stycznia tego roku. Dlatego możliwe jest, że daty na początku stycznia będą częścią 52. lub 53. tygodnia poprzedniego roku, a daty pod koniec grudnia będą częścią pierwszego tygodnia następnego roku.

Oznacza to, że po wyodrębnieniu numeru tygodnia z daty możesz uzyskać różne wyniki w zależności od tego, czy używasz kalendarza gregoriańskiego, czy standardu daty i czasu ISO 8601.

Przykład

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

Wynik:

53

W tym przypadku data to 1 stycznia 2021 r., ale w kategoriach ISO jest to 53 tydzień 2020 r.

Porównanie z gregoriańskim

Oto kolejny przykład, aby porównać go z tygodniem gregoriańskim.

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

Wynik:

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

Widzimy więc, że ta sama data może mieć inny numer tygodnia w zależności od tego, czy używamy kalendarza gregoriańskiego, czy standardu ISO.

Możemy zrobić to samo z datą pod koniec poprzedniego roku.

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

Wynik:

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

Alternatywne argumenty

Jak wspomniano, można alternatywnie użyć isowk lub isoww aby zwrócić numer tygodnia ISO.

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

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak połączyć się z bazą danych MSSQL przy użyciu modułu DBI Perla w systemie Windows?

  2. Jak uzyskać wartości maksymalne i minimalne z tabeli za pomocą funkcji agregującej — samouczek SQL Server / TSQL, część 129

  3. Jak zaktualizować dużą tabelę z milionami wierszy w SQL Server?

  4. SQL Server, wprowadzający w błąd XLOCK i optymalizacje

  5. oddziel wartości oddzielone przecinkami i przechowuj w tabeli na serwerze sql