Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Връщане на ISO номера на седмицата от дата в SQL Server (T-SQL)

Ако трябва да извлечете номера на ISO седмицата от дата в SQL Server, можете да използвате iso_week аргумент при извикване на DATEPART() функция. Като алтернатива можете да използвате isowk или isoww аргументи, за да направите същото.

Под „седмица ISO“ имам предвид стандарта за дата и час ISO 8601.

ISO седмиците започват в понеделник и първата седмица на годината съдържа 4 януари на същата година. Следователно е възможно датите от началото на януари да са част от 52-ата или 53-та седмица на предходната година, а датите от края на декември да са част от първата седмица на следващата година.

Това означава, че когато извлечете номера на седмицата от дата, можете да получите различни резултати в зависимост от това дали използвате григорианския календар или стандарта за дата и час ISO 8601.

Пример

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

Резултат:

53

В този случай датата е 1 януари 2021 г., но от гледна точка на ISO това е 53-та седмица на 2020 г.

Сравнение с григориански

Ето още един пример, за да го сравните с григорианската седмица.

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

Резултат:

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

Така че можем да видим, че една и съща дата може да има различен номер на седмицата в зависимост от това дали използваме григорианския календар или стандарта ISO.

Можем да направим същото с дата близо до края на предходната година.

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

Резултат:

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

Алтернативни аргументи

Както споменахме, алтернативно може да използва isowk или isoww за да върнете номера на седмицата по 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;

Резултат:

+------------+---------+---------+
 | 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. Как да разберем типа данни за география на SQL Server

  2. Какво представлява нулевият символен литерал в TSQL?

  3. Съвети за използване на SQL Server със Salesforce

  4. Възстановяване на паралелно архивиране на SQL Server -1

  5. DATEDIFF() Примери в SQL Server