Перейти к содержимому
Последнее обновление

FROM_ISO8601_DATE

Описание​

Преобразует выражение даты в формате ISO8601 в выражение даты типа DATE. Поддерживаются следующие форматы строк дат, соответствующих стандарту ISO 8601:

  • YYYY: Только год (возвращает 1 января указанного года)
  • YYYY-MM: Год и месяц (возвращает 1-е число указанного месяца)
  • YYYY-DDD: Год + порядковый номер дня в году (диапазон DDD: 1-366, например, 0000-059 обозначает 59-й день года 0000)
  • YYYY-WWW: Год + номер недели (диапазон WWW: 1-53, возвращает понедельник указанной недели)
  • YYYY-WWW-D: Год + номер недели + день недели (диапазон D: 1-7, 1 обозначает понедельник, 7 обозначает воскресенье)
  • В этом формате первая неделя года должна включать четверг; в противном случае она считается неделей предыдущего года

Синтаксис​

from_iso8601_date(<dt>)

Параметры​

ПараметрОписание
<date>Дата в формате ISO8601, заданная строкой

Возвращаемое значение​

Возвращает значение типа DATE в формате YYYY-MM-DD, представляющее конкретную дату, полученную при разборе.

  • Если формат входных данных некорректен, возвращает NULL;
  • Если результат не является допустимым значением даты и времени, возвращает NULL;
  • Если на вход подан NULL, возвращает NULL.

Примеры​

-- Parse different ISO 8601 formatted date strings
select
from_iso8601_date('2023') as year_only,
from_iso8601_date('2023-10') as year_month,
from_iso8601_date('2023-10-05') as full_date;

+------------+------------+------------+
| year_only | year_month | full_date |
+------------+------------+------------+
| 2023-01-01 | 2023-10-01 | 2023-10-05 |
+------------+------------+------------+

-- Parse "year-day number" format
select
from_iso8601_date('2021-001') as day_1,
from_iso8601_date('2021-059') as day_59,
from_iso8601_date('2021-060') as day_60,
from_iso8601_date('2024-366') as day_366;
+------------+------------+------------+------------+
| day_1 | day_59 | day_60 | day_366 |
+------------+------------+------------+------------+
| 0000-01-01 | 0000-02-28 | 0000-03-01 | 2024-12-31 |
+------------+------------+------------+------------+

-- Parse "YYYY-Www-D" format (each week starts with Monday), since 0522-01-01 is Thursday, dates before the first week will return year 0521
select from_iso8601_date('0522-W01-1') as week_1;
+------------+
| week_1 |
+------------+
| 0521-12-29 |
+------------+
1 row in set (0.02 sec)

select from_iso8601_date('0522-W01-4') as week_4;
+------------+
| week_4 |
+------------+
| 0522-01-01 |
+------------+

---YYYY-Www format, Monday of the first week is in year 521
select from_iso8601_date('0522-W01') as week_1;
+------------+
| week_1 |
+------------+
| 0521-12-29 |
+------------+

---invalid style, return NULL
select from_iso8601_date('2023-10-01T12:34:10');
+------------------------------------------+
| from_iso8601_date('2023-10-01T12:34:10') |
+------------------------------------------+
| NULL |
+------------------------------------------+

---invalid result value, return NULL
select from_iso8601_date('2024-400');
+-------------------------------+
| from_iso8601_date('2024-400') |
+-------------------------------+
| NULL |
+-------------------------------+

---input NULL
select from_iso8601_date(NULL);
+-------------------------+
| from_iso8601_date(NULL) |
+-------------------------+
| NULL |
+-------------------------+