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

WEEK() Примери – MySQL

В MySQL можете да използвате WEEK() функция за получаване на номера на седмицата за дадена дата. Под „номер на седмицата“ имам предвид седмицата от годината.

За да използвате функцията, просто посочете датата като аргумент и номерът на седмицата ще бъде върнат.

Освен това имате възможност да укажете дали седмицата да започне в неделя или понеделник и дали седмицата трябва да бъде в диапазона от 0 до 53 или от 1 до 53.

Синтаксис

Синтаксисът е така:

WEEK(date[,mode])

Къде:

  • date е датата, от която искате да се върне номерът на седмицата.
  • mode е число, което определя дали седмицата трябва да започне в неделя или понеделник и дали седмицата трябва да бъде в диапазона от 0 до 53 или от 1 до 53. Вижте таблицата по-долу за възможните стойности на режима.

Пример 1 – Основна употреба

Ето пример за демонстрация.

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

Резултат:

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

Ето пример с дата близо до края на годината.

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

Резултат:

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

Пример 2 – Посочете режим

Ако не посочите втори аргумент, WEEK() функцията използва режима, определен от default_week_format системна променлива. Стойността по подразбиране на тази променлива е 0 .

Все пак имате възможност да предоставите втори аргумент, за да укажете кой режим да използвате. Пример:

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

Резултат:

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

Възможните стойности на режима са както следва.

Режим Първи ден от седмицата Обхват Седмица 1 е първата седмица...
0 Неделя 0-53 с неделя през тази година
1 Понеделник 0-53 с 4 или повече дни тази година
2 Неделя 1-53 с неделя през тази година
3 Понеделник 1-53 с 4 или повече дни тази година
4 Неделя 0-53 с 4 или повече дни тази година
5 Понеделник 0-53 с понеделник през тази година
6 Неделя 1-53 с 4 или повече дни тази година
7 Понеделник 1-53 с понеделник през тази година

За стойности на режима, където седмица 1 е първата седмица „с 4 или повече дни тази година“, седмиците се номерират според ISO 8601:1988:

  • Ако седмицата, съдържаща 1 януари, има 4 или повече дни в новата година, това е седмица 1.
  • В противен случай това е последната седмица на предходната година, а следващата седмица е седмица 1.

Пример 3 – Сравнение на режими

Ето едно бързо сравнение как можете да получите различни резултати в зависимост от използвания режим.

Следващите три примера използват същия код, но с три различни дати. Тези дати са последователни – настъпват на 5, 6 и 7 януари. Както можете да видите, резултатите могат да бъдат доста различни в зависимост от точната дата и използвания режим.

Дата 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';

Резултат:

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

Дата 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';

Резултат:

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

Дата 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';

Резултат:

+--------+--------+--------+--------+--------+--------+--------+--------+
| 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL тригер за актуализиране на поле до стойността на id

  2. Грешка при миграция на Laravel:Синтактична грешка или нарушение на достъпа:1071 Посоченият ключ беше твърде дълъг; максималната дължина на ключа е 767 байта

  3. Използване на Python и MySQL в ETL процеса:Използване на Python и SQLAlchemy

  4. MySQL - UPDATE заявка въз основа на SELECT заявка

  5. Предизвикателства при мащабирането на MySQL базата данни на Moodle