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

Функции для Работы с Датами и Временем

Большинство функций в этом разделе принимают необязательный аргумент часового пояса, например Europe/Amsterdam. В этом случае используется указанный часовой пояс вместо местного (по умолчанию).

Пример

SELECT
    toDateTime('2016-06-15 23:00:00') AS time,
    toDate(time) AS date_local,
    toDate(time, 'Asia/Yekaterinburg') AS date_yekat,
    toString(time, 'US/Samoa') AS time_samoa
┌────────────────time─┬─date_local─┬─date_yekat─┬─time_samoa──────────┐
│ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-16 │ 2016-06-15 09:00:00 │
└─────────────────────┴────────────┴────────────┴─────────────────────┘

makeDate

Создает Date

  • из аргументов год, месяц и день, или
  • из аргументов год и день года.

Синтаксис

makeDate(year, month, day);
makeDate(year, day_of_year);

Псевдонимы:

  • MAKEDATE(year, month, day);
  • MAKEDATE(year, day_of_year);

Аргументы

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

  • Дата, созданная из аргументов. Date.

Пример

Создать дату из года, месяца и дня:

SELECT makeDate(2023, 2, 28) AS Date;

Результат:

┌───────date─┐
│ 2023-02-28 │
└────────────┘

Создать дату из года и аргумента день года:

SELECT makeDate(2023, 42) AS Date;

Результат:

┌───────date─┐
│ 2023-02-11 │
└────────────┘

makeDate32

Создает дату типа Date32 из года, месяца, дня (или опционально из года и дня).

Синтаксис

makeDate32(year, [month,] day)

Аргументы

примечание

Если month опущен, то day должен принимать значение от 1 до 365, в противном случае он должен принимать значение от 1 до 31.

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

  • Дата, созданная из аргументов. Date32.

Примеры

Создать дату из года, месяца и дня:

Запрос:

SELECT makeDate32(2024, 1, 1);

Результат:

2024-01-01

Создать дату из года и дня года:

Запрос:

SELECT makeDate32(2024, 100);

Результат:

2024-04-09

makeDateTime

Создает DateTime из аргументов года, месяца, дня, часа, минуты и секунды.

Синтаксис

makeDateTime(year, month, day, hour, minute, second[, timezone])

Аргументы

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

  • Дата с временем, созданная из аргументов. DateTime.

Пример

SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime;

Результат:

┌────────────DateTime─┐
│ 2023-02-28 17:12:33 │
└─────────────────────┘

makeDateTime64

Создает значение типа DateTime64 из его компонентов: год, месяц, день, час, минута, секунда. С опциональной точностью под-секунды.

Синтаксис

makeDateTime64(year, month, day, hour, minute, second[, precision])

Аргументы

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

  • Дата и время, созданные из предоставленных аргументов. DateTime64.

Пример

SELECT makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5);
┌─makeDateTime64(2023, 5, 15, 10, 30, 45, 779, 5)─┐
│                       2023-05-15 10:30:45.00779 │
└─────────────────────────────────────────────────┘

timestamp

Преобразует первый аргумент 'expr' в тип DateTime64(6). Если предоставлен второй аргумент 'expr_time', он добавляет указанное время к преобразованному значению.

Синтаксис

timestamp(expr[, expr_time])

Псевдоним: TIMESTAMP

Аргументы

  • expr - Дата или дата с временем. Строка.
  • expr_time - Необязательный параметр. Время для добавления. Строка.

Примеры

SELECT timestamp('2023-12-31') as ts;

Результат:

┌─────────────────────────ts─┐
│ 2023-12-31 00:00:00.000000 │
└────────────────────────────┘
SELECT timestamp('2023-12-31 12:00:00', '12:00:00.11') as ts;

Результат:

┌─────────────────────────ts─┐
│ 2024-01-01 00:00:00.110000 │
└────────────────────────────┘

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

timeZone

Возвращает часовой пояс текущей сессии, т.е. значение настройки session_timezone. Если функция выполняется в контексте распределенной таблицы, она генерирует нормальную колонку с значениями, соответствующими каждой шард, иначе она производит константное значение.

Синтаксис

timeZone()

Псевдоним: timezone.

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

Пример

SELECT timezone()

Результат:

┌─timezone()─────┐
│ America/Denver │
└────────────────┘

См. также

serverTimeZone

Возвращает часовой пояс сервера, т.е. значение настройки timezone. Если функция выполняется в контексте распределенной таблицы, она генерирует нормальную колонку с значениями, соответствующими каждой шард. В противном случае она производит константное значение.

Синтаксис

serverTimeZone()

Псевдоним: serverTimezone.

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

Пример

SELECT serverTimeZone()

Результат:

┌─serverTimeZone()─┐
│ UTC              │
└──────────────────┘

См. также

toTimeZone

Преобразует дату или дату с временем к указанному часовому поясу. Не изменяет внутреннее значение (число секунд Unix) данных, только изменяется атрибут часового пояса значения и строковое представление значения.

Синтаксис

toTimezone(value, timezone)

Псевдоним: toTimezone.

Аргументы

  • value — Время или дата и время. DateTime64.
  • timezone — Часовой пояс для возвращаемого значения. Строка. Этот аргумент является константным, так как toTimezone изменяет часовой пояс колонки (часовой пояс является атрибутом типов DateTime*).

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

Пример

SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc,
    toTypeName(time_utc) AS type_utc,
    toInt32(time_utc) AS int32utc,
    toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat,
    toTypeName(time_yekat) AS type_yekat,
    toInt32(time_yekat) AS int32yekat,
    toTimeZone(time_utc, 'US/Samoa') AS time_samoa,
    toTypeName(time_samoa) AS type_samoa,
    toInt32(time_samoa) AS int32samoa
FORMAT Vertical;

Результат:

Row 1:
──────
time_utc:   2019-01-01 00:00:00
type_utc:   DateTime('UTC')
int32utc:   1546300800
time_yekat: 2019-01-01 05:00:00
type_yekat: DateTime('Asia/Yekaterinburg')
int32yekat: 1546300800
time_samoa: 2018-12-31 13:00:00
type_samoa: DateTime('US/Samoa')
int32samoa: 1546300800

См. также

  • formatDateTime - поддерживает неконстантный часовой пояс.
  • toString - поддерживает неконстантный часовой пояс.

timeZoneOf

Возвращает название часового пояса типов DateTime или DateTime64.

Синтаксис

timeZoneOf(value)

Псевдоним: timezoneOf.

Аргументы

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

  • Название часового пояса. Строка.

Пример

SELECT timezoneOf(now());

Результат:

┌─timezoneOf(now())─┐
│ Etc/UTC           │
└───────────────────┘

timeZoneOffset

Возвращает смещение часового пояса в секундах от UTC. Функция учитывает летнее время и исторические изменения часового пояса на указанную дату и время. Используется база данных часовых поясов IANA для расчета смещения.

Синтаксис

timeZoneOffset(value)

Псевдоним: timezoneOffset.

Аргументы

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

  • Смещение от UTC в секундах. Int32.

Пример

SELECT toDateTime('2021-04-21 10:20:30', 'America/New_York') AS Time, toTypeName(Time) AS Type,
       timeZoneOffset(Time) AS Offset_in_seconds, (Offset_in_seconds / 3600) AS Offset_in_hours;

Результат:

┌────────────────Time─┬─Type─────────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐
│ 2021-04-21 10:20:30 │ DateTime('America/New_York') │            -14400 │              -4 │
└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘

toYear

Возвращает компонент года (н.э.) даты или даты с временем.

Синтаксис

toYear(value)

Псевдоним: YEAR

Аргументы

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

  • Год заданной даты/времени. UInt16.

Пример

SELECT toYear(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toYear(toDateTime('2023-04-21 10:20:30'))─┐
│                                      2023 │
└───────────────────────────────────────────┘

toQuarter

Возвращает квартал (1-4) даты или даты с временем.

Синтаксис

toQuarter(value)

Псевдоним: QUARTER

Аргументы

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

  • Квартал года (1, 2, 3 или 4) заданной даты/времени. UInt8.

Пример

SELECT toQuarter(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toQuarter(toDateTime('2023-04-21 10:20:30'))─┐
│                                            2 │
└──────────────────────────────────────────────┘

toMonth

Возвращает компонент месяца (1-12) даты или даты с временем.

Синтаксис

toMonth(value)

Псевдоним: MONTH

Аргументы

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

  • Месяц года (1 - 12) заданной даты/времени. UInt8.

Пример

SELECT toMonth(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toMonth(toDateTime('2023-04-21 10:20:30'))─┐
│                                          4 │
└────────────────────────────────────────────┘

toDayOfYear

Возвращает номер дня в году (1-366) даты или даты с временем.

Синтаксис

toDayOfYear(value)

Псевдоним: DAYOFYEAR

Аргументы

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

  • День года (1 - 366) заданной даты/времени. UInt16.

Пример

SELECT toDayOfYear(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toDayOfYear(toDateTime('2023-04-21 10:20:30'))─┐
│                                            111 │
└────────────────────────────────────────────────┘

toDayOfMonth

Возвращает номер дня в месяце (1-31) даты или даты с временем.

Синтаксис

toDayOfMonth(value)

Псевдонимы: DAYOFMONTH, DAY

Аргументы

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

  • День месяца (1 - 31) заданной даты/времени. UInt8.

Пример

SELECT toDayOfMonth(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐
│                                              21 │
└─────────────────────────────────────────────────┘

toDayOfWeek

Возвращает номер дня в неделе даты или даты с временем.

Двухаргументная форма toDayOfWeek() позволяет указать, начинается ли неделя с понедельника или воскресенья, и нужно ли возвращаемое значение в диапазоне от 0 до 6 или от 1 до 7. Если аргумент mode опущен, то используется значение по умолчанию 0. Часовой пояс даты можно указать как третий аргумент.

РежимПервый день неделиДиапазон
0Понедельник1-7: Понедельник = 1, Вторник = 2, ..., Воскресенье = 7
1Понедельник0-6: Понедельник = 0, Вторник = 1, ..., Воскресенье = 6
2Воскресенье0-6: Воскресенье = 0, Понедельник = 1, ..., Суббота = 6
3Воскресенье1-7: Воскресенье = 1, Понедельник = 2, ..., Суббота = 7

Синтаксис

toDayOfWeek(t[, mode[, timezone]])

Псевдоним: DAYOFWEEK.

Аргументы

  • t - Date, Date32, DateTime или DateTime64
  • mode - определяет, какой день недели является первым. Возможные значения: 0, 1, 2 или 3. См. таблицу выше для различий.
  • timezone - необязательный параметр, который ведет себя как любая другая функция преобразования.

Первый аргумент также может быть указан как Строка в формате, поддерживаемом parseDateTime64BestEffort(). Поддержка строковых аргументов существует только из соображений совместимости с MySQL, ожидаемым некоторыми сторонними инструментами. Так как поддержка строковых аргументов может в будущем зависеть от новых настроек совместимости с MySQL и потому, что парсинг строк обычно медленный, настоятельно рекомендуется не использовать это.

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

  • День недели (1-7), в зависимости от выбранного режима, заданной даты/времени.

Пример

Следующая дата - 21 апреля 2023 года, это был пятница:

SELECT
    toDayOfWeek(toDateTime('2023-04-21')),
    toDayOfWeek(toDateTime('2023-04-21'), 1)

Результат:

┌─toDayOfWeek(toDateTime('2023-04-21'))─┬─toDayOfWeek(toDateTime('2023-04-21'), 1)─┐
│                                     5 │                                        4 │
└───────────────────────────────────────┴──────────────────────────────────────────┘

toHour

Возвращает компонент часа (0-24) даты с временем.

Предполагается, что если часы переведены вперед, это происходит на один час и происходит в 2 часа ночи, а если часы переведены назад, то это происходит на один час и происходит в 3 часа ночи (что не всегда происходит точно в это время - это зависит от часового пояса).

Синтаксис

toHour(value)

Псевдоним: HOUR

Аргументы

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

  • Час дня (0 - 23) заданной даты/времени. UInt8.

Пример

SELECT toHour(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toHour(toDateTime('2023-04-21 10:20:30'))─┐
│                                        10 │
└───────────────────────────────────────────┘

toMinute

Возвращает компонент минуты (0-59) даты с временем.

Синтаксис

toMinute(value)

Псевдоним: MINUTE

Аргументы

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

  • Минута часа (0 - 59) заданной даты/времени. UInt8.

Пример

SELECT toMinute(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toMinute(toDateTime('2023-04-21 10:20:30'))─┐
│                                          20 │
└─────────────────────────────────────────────┘

toSecond

Возвращает компонент секунды (0-59) даты с временем. Высокосные секунды не учитываются.

Синтаксис

toSecond(value)

Псевдоним: SECOND

Аргументы

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

  • Секунда в минуте (0 - 59) заданной даты/времени. UInt8.

Пример

SELECT toSecond(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toSecond(toDateTime('2023-04-21 10:20:30'))─┐
│                                          30 │
└─────────────────────────────────────────────┘

toMillisecond

Возвращает компонент миллисекунды (0-999) даты с временем.

Синтаксис

toMillisecond(value)

Аргументы

Псевдоним: MILLISECOND

SELECT toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))

Результат:

┌──toMillisecond(toDateTime64('2023-04-21 10:20:30.456', 3))─┐
│                                                        456 │
└────────────────────────────────────────────────────────────┘

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

  • Миллисекунда в минуте (0 - 599) заданной даты/времени. UInt16.

toUnixTimestamp

Преобразует строку, дату или дату с временем в Unix Timestamp в представлении UInt32.

Если функция вызывается со строкой, она принимает необязательный аргумент часового пояса.

Синтаксис

toUnixTimestamp(date)
toUnixTimestamp(str, [timezone])

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

  • Возвращает unix timestamp. UInt32.

Пример

SELECT
    '2017-11-05 08:07:47' AS dt_str,
    toUnixTimestamp(dt_str) AS from_str,
    toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo,
    toUnixTimestamp(toDateTime(dt_str)) AS from_datetime,
    toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64,
    toUnixTimestamp(toDate(dt_str)) AS from_date,
    toUnixTimestamp(toDate32(dt_str)) AS from_date32
FORMAT Vertical;

Результат:

Row 1:
──────
dt_str:          2017-11-05 08:07:47
from_str:        1509869267
from_str_tokyo:  1509836867
from_datetime:   1509869267
from_datetime64: 1509869267
from_date:       1509840000
from_date32:     1509840000
примечание

Тип возвращаемого результата функций toStartOf*, toLastDayOf*, toMonday, timeSlot, описанных ниже, определяется параметром конфигурации enable_extended_results_for_datetime_functions, который по умолчанию равен 0.

Поведение для

  • enable_extended_results_for_datetime_functions = 0:
    • Функции toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toLastDayOfWeek, toLastDayOfMonth, toMonday возвращают Date или DateTime.
    • Функции toStartOfDay, toStartOfHour, toStartOfFifteenMinutes, toStartOfTenMinutes, toStartOfFiveMinutes, toStartOfMinute, timeSlot возвращают DateTime. Хотя эти функции могут принимать значения расширенных типов Date32 и DateTime64 в качестве аргумента, передача им времени за пределами нормального диапазона (год 1970 до 2149 для Date / 2106 для DateTime) приведет к неправильным результатам.
  • enable_extended_results_for_datetime_functions = 1:
    • Функции toStartOfYear, toStartOfISOYear, toStartOfQuarter, toStartOfMonth, toStartOfWeek, toLastDayOfWeek, toLastDayOfMonth, toMonday возвращают Date или DateTime, если их аргумент является Date или DateTime, и они возвращают Date32 или DateTime64, если их аргумент является Date32 или DateTime64.
    • Функции toStartOfDay, toStartOfHour, toStartOfFifteenMinutes, toStartOfTenMinutes, toStartOfFiveMinutes, toStartOfMinute, timeSlot возвращают DateTime, если их аргумент является Date или DateTime, и они возвращают DateTime64, если их аргумент является Date32 или DateTime64.

toStartOfYear

Округляет дату или дату с временем до первого дня года. Возвращает дату как объект Date.

Синтаксис

toStartOfYear(value)

Аргументы

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

  • Первый день года входной даты/времени. Date.

Пример

SELECT toStartOfYear(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toStartOfYear(toDateTime('2023-04-21 10:20:30'))─┐
│                                       2023-01-01 │
└──────────────────────────────────────────────────┘

toStartOfISOYear

Округляет дату или дату с временем до первого дня ISO года, который может отличаться от "обычного" года. (См. https://en.wikipedia.org/wiki/ISO_week_date.)

Синтаксис

toStartOfISOYear(value)

Аргументы

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

  • Первый день года входной даты/времени. Date.

Пример

SELECT toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toStartOfISOYear(toDateTime('2023-04-21 10:20:30'))─┐
│                                          2023-01-02 │
└─────────────────────────────────────────────────────┘

toStartOfQuarter

Округляет дату или дату с временем до первого дня квартала. Первый день квартала — это либо 1 января, 1 апреля, 1 июля, либо 1 октября. Возвращает дату.

Синтаксис

toStartOfQuarter(value)

Аргументы

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

  • Первый день квартала заданной даты/времени. Date.

Пример

SELECT toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toStartOfQuarter(toDateTime('2023-04-21 10:20:30'))─┐
│                                          2023-04-01 │
└─────────────────────────────────────────────────────┘

toStartOfMonth

Округляет дату или дату с временем до первого дня месяца. Возвращает дату.

Синтаксис

toStartOfMonth(value)

Аргументы

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

  • Первый день месяца заданной даты/времени. Date.

Пример

SELECT toStartOfMonth(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toStartOfMonth(toDateTime('2023-04-21 10:20:30'))─┐
│                                        2023-04-01 │
└───────────────────────────────────────────────────┘
примечание

Поведение парсинга некорректных дат является специфичным для реализации. ClickHouse может вернуть нулевую дату, выбросить исключение или сделать "естественное" переполнение.

toLastDayOfMonth

Округляет дату или дату с временем до последнего дня месяца. Возвращает дату.

Синтаксис

toLastDayOfMonth(value)

Псевдоним: LAST_DAY

Аргументы

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

  • Последний день месяца заданной даты/времени. Date.

Пример

SELECT toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toLastDayOfMonth(toDateTime('2023-04-21 10:20:30'))─┐
│                                          2023-04-30 │
└─────────────────────────────────────────────────────┘

toMonday

Округляет дату или дату с временем до ближайшего понедельника. Возвращает дату.

Синтаксис

toMonday(value)

Аргументы

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

  • Дата ближайшего понедельника на или до указанной даты. Date.

Пример

SELECT
    toMonday(toDateTime('2023-04-21 10:20:30')), /* пятница */
    toMonday(toDate('2023-04-24')), /* уже понедельник */

Результат:

┌─toMonday(toDateTime('2023-04-21 10:20:30'))─┬─toMonday(toDate('2023-04-24'))─┐
│                                  2023-04-17 │                     2023-04-24 │
└─────────────────────────────────────────────┴────────────────────────────────┘
title: 'toStartOfWeek'
sidebar_label: 'toStartOfWeek'
keywords: ['toStartOfWeek', 'дата', 'время', 'неделя', 'функция']
description: 'Округляет дату до ближайшего воскресенья или понедельника.'

toStartOfWeek

Округляет дату или дату с временем до ближайшего воскресенья или понедельника. Возвращает дату. Аргумент mode работает точно так же, как аргумент mode в функции toWeek(). Если режим не указан, по умолчанию используется 0.

Синтаксис

toStartOfWeek(t[, mode[, timezone]])

Аргументы

  • t - Дата, Date32, DateTime или DateTime64
  • mode - определяет первый день недели, как описано в функции toWeek()
  • timezone - необязательный параметр, ведет себя как любая другая функция преобразования

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

  • Дата ближайшего воскресенья или понедельника до или на заданной дате, в зависимости от режима. Дата.

Пример

SELECT
    toStartOfWeek(toDateTime('2023-04-21 10:20:30')), /* пятница */
    toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* пятница */
    toStartOfWeek(toDate('2023-04-24')), /* понедельник */
    toStartOfWeek(toDate('2023-04-24'), 1) /* понедельник */
FORMAT Vertical

Результат:

Row 1:
──────
toStartOfWeek(toDateTime('2023-04-21 10:20:30')):    2023-04-16
toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-17
toStartOfWeek(toDate('2023-04-24')):                 2023-04-23
toStartOfWeek(toDate('2023-04-24'), 1):              2023-04-24

toLastDayOfWeek

Округляет дату или дату с временем до ближайшей субботы или воскресенья. Возвращает дату. Аргумент mode работает точно так же, как аргумент mode в функции toWeek(). Если режим не указан, режим считается равным 0.

Синтаксис

toLastDayOfWeek(t[, mode[, timezone]])

Аргументы

  • t - Дата, Date32, DateTime или DateTime64
  • mode - определяет последний день недели, как описано в toWeek функции
  • timezone - необязательный параметр, ведет себя как любая другая функция преобразования

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

  • Дата ближайшего воскресенья или понедельника на или после заданной даты, в зависимости от режима. Дата.

Пример

SELECT
    toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')), /* пятница */
    toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* пятница */
    toLastDayOfWeek(toDate('2023-04-22')), /* суббота */
    toLastDayOfWeek(toDate('2023-04-22'), 1) /* суббота */
FORMAT Vertical

Результат:

Row 1:
──────
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')):    2023-04-22
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1): 2023-04-23
toLastDayOfWeek(toDate('2023-04-22')):                 2023-04-22
toLastDayOfWeek(toDate('2023-04-22'), 1):              2023-04-23

toStartOfDay

Округляет дату с временем до начала дня.

Синтаксис

toStartOfDay(value)

Аргументы

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

  • Начало дня заданной даты/времени. DateTime.

Пример

SELECT toStartOfDay(toDateTime('2023-04-21 10:20:30'))

Результат:

┌─toStartOfDay(toDateTime('2023-04-21 10:20:30'))─┐
│                             2023-04-21 00:00:00 │
└─────────────────────────────────────────────────┘

toStartOfHour

Округляет дату с временем до начала часа.

Синтаксис

toStartOfHour(value)

Аргументы

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

  • Начало часа заданной даты/времени. DateTime.

Пример

SELECT
    toStartOfHour(toDateTime('2023-04-21 10:20:30')),
    toStartOfHour(toDateTime64('2023-04-21', 6))

Результат:

┌─toStartOfHour(toDateTime('2023-04-21 10:20:30'))─┬─toStartOfHour(toDateTime64('2023-04-21', 6))─┐
│                              2023-04-21 10:00:00 │                          2023-04-21 00:00:00 │
└──────────────────────────────────────────────────┴──────────────────────────────────────────────┘

toStartOfMinute

Округляет дату с временем до начала минуты.

Синтаксис

toStartOfMinute(value)

Аргументы

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

  • Начало минуты заданной даты/времени. DateTime.

Пример

SELECT
    toStartOfMinute(toDateTime('2023-04-21 10:20:30')),
    toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8))
FORMAT Vertical

Результат:

Row 1:
──────
toStartOfMinute(toDateTime('2023-04-21 10:20:30')):           2023-04-21 10:20:00
toStartOfMinute(toDateTime64('2023-04-21 10:20:30.5300', 8)): 2023-04-21 10:20:00

toStartOfSecond

Убирает подсекунды.

Синтаксис

toStartOfSecond(value, [timezone])

Аргументы

  • value — Дата и время. DateTime64.
  • timezoneЧасовой пояс для возвращаемого значения (необязательный). Если не указан, функция использует часовой пояс параметра value. Строка.

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

  • Входное значение без подсекунд. DateTime64.

Примеры

Запрос без часового пояса:

WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64
SELECT toStartOfSecond(dt64);

Результат:

┌───toStartOfSecond(dt64)─┐
│ 2020-01-01 10:20:30.000 │
└─────────────────────────┘

Запрос с часовым поясом:

WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64
SELECT toStartOfSecond(dt64, 'Asia/Istanbul');

Результат:

┌─toStartOfSecond(dt64, 'Asia/Istanbul')─┐
│                2020-01-01 13:20:30.000 │
└────────────────────────────────────────┘

См. также

toStartOfMillisecond

Округляет дату с временем до начала миллисекунд.

Синтаксис

toStartOfMillisecond(value, [timezone])

Аргументы

  • value — Дата и время. DateTime64.
  • timezoneЧасовой пояс для возвращаемого значения (необязательный). Если не указан, функция использует часовой пояс параметра value. Строка.

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

  • Входное значение с подмиллисекундами. DateTime64.

Примеры

Запрос без часового пояса:

WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMillisecond(dt64);

Результат:

┌────toStartOfMillisecond(dt64)─┐
│ 2020-01-01 10:20:30.999000000 │
└───────────────────────────────┘

Запрос с часовым поясом:

WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMillisecond(dt64, 'Asia/Istanbul');

Результат:

┌─toStartOfMillisecond(dt64, 'Asia/Istanbul')─┐
│               2020-01-01 12:20:30.999000000 │
└─────────────────────────────────────────────┘

См. также

toStartOfMicrosecond

Округляет дату с временем до начала микросекунд.

Синтаксис

toStartOfMicrosecond(value, [timezone])

Аргументы

  • value — Дата и время. DateTime64.
  • timezoneЧасовой пояс для возвращаемого значения (необязательный). Если не указан, функция использует часовой пояс параметра value. Строка.

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

  • Входное значение с подмикросекундами. DateTime64.

Примеры

Запрос без часового пояса:

WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMicrosecond(dt64);

Результат:

┌────toStartOfMicrosecond(dt64)─┐
│ 2020-01-01 10:20:30.999999000 │
└───────────────────────────────┘

Запрос с часовым поясом:

WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfMicrosecond(dt64, 'Asia/Istanbul');

Результат:

┌─toStartOfMicrosecond(dt64, 'Asia/Istanbul')─┐
│               2020-01-01 12:20:30.999999000 │
└─────────────────────────────────────────────┘

См. также

toStartOfNanosecond

Округляет дату с временем до начала наносекунд.

Синтаксис

toStartOfNanosecond(value, [timezone])

Аргументы

  • value — Дата и время. DateTime64.
  • timezoneЧасовой пояс для возвращаемого значения (необязательный). Если не указан, функция использует часовой пояс параметра value. Строка.

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

  • Входное значение с наносекундами. DateTime64.

Примеры

Запрос без часового пояса:

WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfNanosecond(dt64);

Результат:

┌─────toStartOfNanosecond(dt64)─┐
│ 2020-01-01 10:20:30.999999999 │
└───────────────────────────────┘

Запрос с часовым поясом:

WITH toDateTime64('2020-01-01 10:20:30.999999999', 9) AS dt64
SELECT toStartOfNanosecond(dt64, 'Asia/Istanbul');

Результат:

┌─toStartOfNanosecond(dt64, 'Asia/Istanbul')─┐
│              2020-01-01 12:20:30.999999999 │
└────────────────────────────────────────────┘

См. также

toStartOfFiveMinutes

Округляет дату с временем до начала пятиминутного интервала.

Синтаксис

toStartOfFiveMinutes(value)

Аргументы

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

  • Начало пятиминутного интервала заданной даты/времени. DateTime.

Пример

SELECT
    toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')),
    toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')),
    toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00'))
FORMAT Vertical

Результат:

Row 1:
──────
toStartOfFiveMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00
toStartOfFiveMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00
toStartOfFiveMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00

toStartOfTenMinutes

Округляет дату с временем до начала десятиминутного интервала.

Синтаксис

toStartOfTenMinutes(value)

Аргументы

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

  • Начало десятиминутного интервала заданной даты/времени. DateTime.

Пример

SELECT
    toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')),
    toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')),
    toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00'))
FORMAT Vertical

Результат:

Row 1:
──────
toStartOfTenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:10:00
toStartOfTenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:20:00
toStartOfTenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:20:00

toStartOfFifteenMinutes

Округляет дату с временем до начала пятнадцатиминутного интервала.

Синтаксис

toStartOfFifteenMinutes(value)

Аргументы

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

  • Начало пятнадцатиминутного интервала заданной даты/времени. DateTime.

Пример

SELECT
    toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')),
    toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')),
    toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00'))
FORMAT Vertical

Результат:

Row 1:
──────
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:17:00')): 2023-04-21 10:15:00
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:20:00')): 2023-04-21 10:15:00
toStartOfFifteenMinutes(toDateTime('2023-04-21 10:23:00')): 2023-04-21 10:15:00

toStartOfInterval

Эта функция обобщает другие функции toStartOf*() с синтаксисом toStartOfInterval(date_or_date_with_time, INTERVAL x unit [, time_zone]). Например:

  • toStartOfInterval(t, INTERVAL 1 YEAR) возвращает то же самое, что toStartOfYear(t),
  • toStartOfInterval(t, INTERVAL 1 MONTH) возвращает то же самое, что toStartOfMonth(t),
  • toStartOfInterval(t, INTERVAL 1 DAY) возвращает то же самое, что toStartOfDay(t),
  • toStartOfInterval(t, INTERVAL 15 MINUTE) возвращает то же самое, что toStartOfFifteenMinutes(t).

Расчет выполняется относительно определенных моментов времени:

ИнтервалНачало
ГОДгод 0
КВАРТАЛ1900 Q1
МЕСЯЦЯнварь 1900
НЕДЕЛЯ1970, 1-ая неделя (01-05)
ДЕНЬ1970-01-01
ЧАС(*)
МИНУТА1970-01-01 00:00:00
СЕКУНДА1970-01-01 00:00:00
МИЛЛИСЕКУНДА1970-01-01 00:00:00
МИКРОСЕКУНДА1970-01-01 00:00:00
НАНОСЕКУНДА1970-01-01 00:00:00

(*) интервалы часов особые: расчет всегда выполняется относительно 00:00:00 (полночь) текущего дня. В результате только значения часов от 1 до 23 полезны.

Если указан единица WEEK, toStartOfInterval предполагает, что недели начинаются с понедельника. Обратите внимание, что это поведение отличается от функции toStartOfWeek, в которой недели по умолчанию начинаются в воскресенье.

Синтаксис

toStartOfInterval(value, INTERVAL x unit[, time_zone])
toStartOfInterval(value, INTERVAL x unit[, origin[, time_zone]])

Псевдонимы: time_bucket, date_bin.

Вторая перегрузка эмулирует функцию TimescaleDB time_bucket(), соответственно функцию PostgreSQL date_bin(), например.

SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));

Результат:

┌───toStartOfInterval(...)─┐
│      2023-01-01 14:44:30 │
└──────────────────────────┘

См. также

toTimeWithFixedDate

Преобразует дату с временем в определенную фиксированную дату, сохраняя время.

Синтаксис

toTimeWithFixedDate(date[,timezone])

Псевдоним: toTime - может использоваться только при включении настройки use_legacy_to_time.

Аргументы

  • date — Дата для преобразования во время. Дата/DateTime/DateTime64.
  • timezone (необязательный) — Часовой пояс для возвращаемого значения. Строка.

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

  • DateTime с датой, равной 1970-01-02, при этом время сохраняется. DateTime.
примечание

Если аргумент date содержал подсекундные компоненты, они будут отброшены в возвращаемом значении DateTime с точностью до секунд.

Пример

Запрос:

SELECT toTime(toDateTime64('1970-12-10 01:20:30.3000',3)) AS result, toTypeName(result);

Результат:

┌──────────────result─┬─toTypeName(result)─┐
│ 1970-01-02 01:20:30 │ DateTime           │
└─────────────────────┴────────────────────┘

toRelativeYearNum

Преобразует дату или дату с временем в число лет, прошедших с определенного фиксированного момента в прошлом.

Синтаксис

toRelativeYearNum(date)

Аргументы

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

  • Количество лет с фиксированной опорной точки в прошлом. UInt16.

Пример

Запрос:

SELECT
    toRelativeYearNum(toDate('2002-12-08')) AS y1,
    toRelativeYearNum(toDate('2010-10-26')) AS y2

Результат:

┌───y1─┬───y2─┐
│ 2002 │ 2010 │
└──────┴──────┘

toRelativeQuarterNum

Преобразует дату или дату с временем в количество кварталов, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeQuarterNum(date)

Аргументы

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

  • Количество кварталов с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeQuarterNum(toDate('1993-11-25')) AS q1,
  toRelativeQuarterNum(toDate('2005-01-05')) AS q2

Результат:

┌───q1─┬───q2─┐
│ 7975 │ 8020 │
└──────┴──────┘

toRelativeMonthNum

Преобразует дату или дату с временем в количество месяцев, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeMonthNum(date)

Аргументы

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

  • Количество месяцев с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeMonthNum(toDate('2001-04-25')) AS m1,
  toRelativeMonthNum(toDate('2009-07-08')) AS m2

Результат:

┌────m1─┬────m2─┐
│ 24016 │ 24115 │
└───────┴───────┘

toRelativeWeekNum

Преобразует дату или дату с временем в количество недель, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeWeekNum(date)

Аргументы

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

  • Количество недель с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeWeekNum(toDate('2000-02-29')) AS w1,
  toRelativeWeekNum(toDate('2001-01-12')) AS w2

Результат:

┌───w1─┬───w2─┐
│ 1574 │ 1619 │
└──────┴──────┘

toRelativeDayNum

Преобразует дату или дату с временем в количество дней, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeDayNum(date)

Аргументы

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

  • Количество дней с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeDayNum(toDate('1993-10-05')) AS d1,
  toRelativeDayNum(toDate('2000-09-20')) AS d2

Результат:

┌───d1─┬────d2─┐
│ 8678 │ 11220 │
└──────┴───────┘

toRelativeHourNum

Преобразует дату или дату с временем в количество часов, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeHourNum(date)

Аргументы

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

  • Количество часов с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeHourNum(toDateTime('1993-10-05 05:20:36')) AS h1,
  toRelativeHourNum(toDateTime('2000-09-20 14:11:29')) AS h2

Результат:

┌─────h1─┬─────h2─┐
│ 208276 │ 269292 │
└────────┴────────┘

toRelativeMinuteNum

Преобразует дату или дату с временем в количество минут, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeMinuteNum(date)

Аргументы

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

  • Количество минут с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeMinuteNum(toDateTime('1993-10-05 05:20:36')) AS m1,
  toRelativeMinuteNum(toDateTime('2000-09-20 14:11:29')) AS m2

Результат:

┌───────m1─┬───────m2─┐
│ 12496580 │ 16157531 │
└──────────┴──────────┘

toRelativeSecondNum

Преобразует дату или дату с временем в количество секунд, прошедших с определенной фиксированной точки в прошлом.

Синтаксис

toRelativeSecondNum(date)

Аргументы

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

  • Количество секунд с фиксированной опорной точки в прошлом. UInt32.

Пример

Запрос:

SELECT
  toRelativeSecondNum(toDateTime('1993-10-05 05:20:36')) AS s1,
  toRelativeSecondNum(toDateTime('2000-09-20 14:11:29')) AS s2

Результат:

┌────────s1─┬────────s2─┐
│ 749794836 │ 969451889 │
└───────────┴───────────┘

toISOYear

Преобразует дату или дату с временем в ISO год как число UInt16.

Синтаксис

toISOYear(value)

Аргументы

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

  • Входное значение, преобразованное в номер ISO года. UInt16.

Пример

Запрос:

SELECT
  toISOYear(toDate('2024/10/02')) as year1,
  toISOYear(toDateTime('2024-10-02 01:30:00')) as year2

Результат:

┌─year1─┬─year2─┐
│  2024 │  2024 │
└───────┴───────┘

toISOWeek

Преобразует дату или дату с временем в число UInt8, содержащее номер ISO недели.

Синтаксис

toISOWeek(value)

Аргументы

  • value — Значение с датой или датой с временем.

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

  • value, преобразованное в текущий номер ISO недели. UInt8.

Пример

Запрос:

SELECT
  toISOWeek(toDate('2024/10/02')) AS week1,
  toISOWeek(toDateTime('2024/10/02 01:30:00')) AS week2

Результат:

┌─week1─┬─week2─┐
│    40 │    40 │
└───────┴───────┘

toWeek

Эта функция возвращает номер недели для даты или даты и времени. Двухаргументная форма toWeek() позволяет вам указать, начинается ли неделя с воскресенья или понедельника и должен ли возвращаемый результат находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, по умолчанию используется режим 0.

toISOWeek() является функцией совместимости, эквивалентной toWeek(date,3).

Следующая таблица описывает, как работает аргумент mode.

РежимПервый день неделиДиапазонНомер недели 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с понедельником в этом году
8Воскресенье1-53содержит 1 января
9Понедельник1-53содержит 1 января

Для значений режима, имеющих значение "с 4 и более днями в этом году", недели нумеруются в соответствии с ISO 8601:1988:

  • Если неделя, содержащая 1 января, имеет 4 и более дней в новом году, она является неделей 1.

  • В противном случае это последняя неделя предыдущего года, и следующая неделя является неделей 1.

Для значений режима со значением "содержит 1 января", неделя, содержащая 1 января, является неделей 1. Не имеет значения, сколько дней в новом году содержала неделя, даже если она содержала только один день. Т.е. если последняя неделя декабря содержит 1 января следующего года, она будет неделей 1 следующего года.

Синтаксис

toWeek(t[, mode[, time_zone]])

Псевдоним: WEEK

Аргументы

  • t – Дата или DateTime.
  • mode – необязательный параметр, диапазон значений [0,9], по умолчанию 0.
  • timezone – необязательный параметр, ведет себя как любая другая функция преобразования.

Первый аргумент также может быть указан как Строка в формате, поддерживаемом parseDateTime64BestEffort(). Поддержка строковых аргументов существует только по причине совместимости с MySQL, которую ожидают определенные сторонние инструменты. Поскольку поддержка строковых аргументов может в будущем зависеть от новых настроек совместимости с MySQL и потому что анализ строк обычно медленный, рекомендуется не использовать его.

Пример

SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9;
┌───────date─┬─week0─┬─week1─┬─week9─┐
│ 2016-12-27 │    52 │    52 │     1 │
└────────────┴───────┴───────┴───────┘

toYearWeek

Возвращает год и неделю для даты. Год в результате может отличаться от года в аргументе даты для первой и последней недели года.

Аргумент mode работает как аргумент mode для toWeek(). Для синтаксиса с одним аргументом используется значение режима 0.

toISOYear() является функцией совместимости, эквивалентной intDiv(toYearWeek(date,3),100).

предупреждение

Номер недели, возвращаемый toYearWeek(), может отличаться от того, что возвращает toWeek(). toWeek() всегда возвращает номер недели в контексте данного года, и если toWeek() возвращает 0, toYearWeek() возвращает значение, соответствующее последней неделе предыдущего года. См. prev_yearWeek в примере ниже.

Синтаксис

toYearWeek(t[, mode[, timezone]])

Псевдоним: YEARWEEK

Первый аргумент также может быть указан как Строка в формате, поддерживаемом parseDateTime64BestEffort(). Поддержка строковых аргументов существует только по причине совместимости с MySQL, которую ожидают определенные сторонние инструменты. Поскольку поддержка строковых аргументов может в будущем зависеть от новых настроек совместимости с MySQL и потому что анализ строк обычно медленный, рекомендуется не использовать его.

Пример

SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9, toYearWeek(toDate('2022-01-01')) AS prev_yearWeek;
┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┬─prev_yearWeek─┐
│ 2016-12-27 │    201652 │    201652 │    201701 │        202152 │
└────────────┴───────────┴───────────┴───────────┴───────────────┘

toDaysSinceYearZero

Возвращает для заданной даты количество дней, прошедших с 1 января 0000 в пролептическом григорианском календаре, определенном ISO 8601. Расчет такой же, как в функции MySQL TO_DAYS().

Синтаксис

toDaysSinceYearZero(date[, time_zone])

Псевдоним: TO_DAYS

Аргументы

  • date — Дата для вычисления количества дней, прошедших с нулевого года. Дата, Date32, DateTime или DateTime64.
  • time_zone — Константное значение типа строки или выражение, представляющее часовой пояс. Строковые типы

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

Количество дней, прошедших с даты 0000-01-01. UInt32.

Пример

SELECT toDaysSinceYearZero(toDate('2023-09-08'));

Результат:

┌─toDaysSinceYearZero(toDate('2023-09-08')))─┐
│                                     713569 │
└────────────────────────────────────────────┘

См. также

title: 'Функции работы с датой и временем'
sidebar_label: 'Функции даты и времени'
keywords: ['функции', 'дата', 'время']
description: 'Документация по функциям работы с датой и временем в ClickHouse.'

fromDaysSinceYearZero

Возвращает для заданного числа дней, прошедших с 1 января 0000, соответствующую дату в пролептическом григорианском календаре, определенном ISO 8601. Расчет такой же, как в функции MySQL FROM_DAYS().

Результат не определен, если его нельзя представить в пределах границ типа Date.

Синтаксис

fromDaysSinceYearZero(days)

Псевдоним: FROM_DAYS

Аргументы

  • days — число дней, прошедших с года ноль.

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

Дата, соответствующая числу дней, прошедших с года ноль. Date.

Пример

SELECT fromDaysSinceYearZero(739136), fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08')));

Результат:

┌─fromDaysSinceYearZero(739136)─┬─fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08')))─┐
│                    2023-09-08 │                                                       2023-09-08 │
└───────────────────────────────┴──────────────────────────────────────────────────────────────────┘

Смотрите также

fromDaysSinceYearZero32

Как fromDaysSinceYearZero, но возвращает Date32.

age

Возвращает компонент unit разницы между startdate и enddate. Разница рассчитывается с точностью 1 наносекунда. Например, разница между 2021-12-29 и 2022-01-01 составляет 3 дня для единицы day, 0 месяцев для единицы month, 0 лет для единицы year.

Для альтернативы age смотрите функцию date_diff.

Синтаксис

age('unit', startdate, enddate, [timezone])

Аргументы

  • unit — тип интервала для результата. String. Возможные значения:

    • nanosecond, nanoseconds, ns
    • microsecond, microseconds, us, u
    • millisecond, milliseconds, ms
    • second, seconds, ss, s
    • minute, minutes, mi, n
    • hour, hours, hh, h
    • day, days, dd, d
    • week, weeks, wk, ww
    • month, months, mm, m
    • quarter, quarters, qq, q
    • year, years, yyyy, yy
  • startdate — первое временное значение для вычитания (уменьшаемое). Date, Date32, DateTime или DateTime64.

  • enddate — второе временное значение, из которого вычитается (вычитаемое). Date, Date32, DateTime или DateTime64.

  • timezoneИмя часового пояса (опционально). Если указано, он применяется как к startdate, так и к enddate. Если не указано, используются часовые пояса startdate и enddate. Если они разные, результат не определен. String.

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

Разница между enddate и startdate, выраженная в unit. Int.

Пример

SELECT age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'));

Результат:

┌─age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'))─┐
│                                                                                     24 │
└────────────────────────────────────────────────────────────────────────────────────────┘
SELECT
    toDate('2022-01-01') AS e,
    toDate('2021-12-29') AS s,
    age('day', s, e) AS day_age,
    age('month', s, e) AS month__age,
    age('year', s, e) AS year_age;

Результат:

┌──────────e─┬──────────s─┬─day_age─┬─month__age─┬─year_age─┐
│ 2022-01-01 │ 2021-12-29 │       3 │          0 │        0 │
└────────────┴────────────┴─────────┴────────────┴──────────┘

date_diff

Возвращает количество пересеченных границ указанного unit между startdate и enddate. Разница рассчитывается с использованием относительных единиц. Например, разница между 2021-12-29 и 2022-01-01 составляет 3 дня для единицы day (см. toRelativeDayNum), 1 месяц для единицы month (см. toRelativeMonthNum) и 1 год для единицы year (см. toRelativeYearNum).

Если указана единица week, date_diff предполагает, что недели начинаются с понедельника. Обратите внимание, что это поведение отличается от функции toWeek(), в которой недели по умолчанию начинаются с воскресенья.

Для альтернативы date_diff смотрите функцию age.

Синтаксис

date_diff('unit', startdate, enddate, [timezone])

Псевдонимы: dateDiff, DATE_DIFF, timestampDiff, timestamp_diff, TIMESTAMP_DIFF.

Аргументы

  • unit — тип интервала для результата. String. Возможные значения:

    • nanosecond, nanoseconds, ns
    • microsecond, microseconds, us, u
    • millisecond, milliseconds, ms
    • second, seconds, ss, s
    • minute, minutes, mi, n
    • hour, hours, hh, h
    • day, days, dd, d
    • week, weeks, wk, ww
    • month, months, mm, m
    • quarter, quarters, qq, q
    • year, years, yyyy, yy
  • startdate — первое временное значение для вычитания (уменьшаемое). Date, Date32, DateTime или DateTime64.

  • enddate — второе временное значение, из которого вычитается (вычитаемое). Date, Date32, DateTime или DateTime64.

  • timezoneИмя часового пояса (опционально). Если указано, он применяется как к startdate, так и к enddate. Если не указано, используются часовые пояса startdate и enddate. Если они разные, результат не определен. String.

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

Разница между enddate и startdate, выраженная в unit. Int.

Пример

SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'));

Результат:

┌─dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))─┐
│                                                                                     25 │
└────────────────────────────────────────────────────────────────────────────────────────┘
SELECT
    toDate('2022-01-01') AS e,
    toDate('2021-12-29') AS s,
    dateDiff('day', s, e) AS day_diff,
    dateDiff('month', s, e) AS month__diff,
    dateDiff('year', s, e) AS year_diff;

Результат:

┌──────────e─┬──────────s─┬─day_diff─┬─month__diff─┬─year_diff─┐
│ 2022-01-01 │ 2021-12-29 │        3 │           1 │         1 │
└────────────┴────────────┴──────────┴─────────────┴───────────┘

date_trunc

Укорачивает дату и время до указанной части даты.

Синтаксис

date_trunc(unit, value[, timezone])

Псевдоним: dateTrunc.

Аргументы

  • unit — тип интервала для укорачивания результата. String Literal. Возможные значения:

    • nanosecond - Совместим только с DateTime64
    • microsecond - Совместим только с DateTime64
    • millisecond - Совместим только с DateTime64
    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year

    Аргумент unit регистронезависим.

  • value — Дата и время. Date, Date32, DateTime или DateTime64.

  • timezoneИмя часового пояса для возвращаемого значения (опционально). Если не указано, функция использует часовой пояс параметра value. String.

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

Если аргумент unit — Год, Четверть, Месяц или Неделя,

  • и аргумент value является Date32 или DateTime64, то возвращается Date32,
  • в противном случае возвращается Date.

Если аргумент unit — День, Час, Минута или Секунда,

  • и аргумент value является Date32 или DateTime64, то возвращается DateTime64,
  • в противном случае возвращается DateTime.

Если аргумент unit — Миллисекунда, Микросекунда или Наносекунда, то возвращается DateTime64 с масштабом 3, 6 или 9 (в зависимости от аргумента unit).

Пример

Запрос без часового пояса:

SELECT now(), date_trunc('hour', now());

Результат:

┌───────────────now()─┬─date_trunc('hour', now())─┐
│ 2020-09-28 10:40:45 │       2020-09-28 10:00:00 │
└─────────────────────┴───────────────────────────┘

Запрос с указанным часовым поясом:

SELECT now(), date_trunc('hour', now(), 'Asia/Istanbul');

Результат:

┌───────────────now()─┬─date_trunc('hour', now(), 'Asia/Istanbul')─┐
│ 2020-09-28 10:46:26 │                        2020-09-28 13:00:00 │
└─────────────────────┴────────────────────────────────────────────┘

Смотрите также

date_add

Добавляет временной или датный интервал к заданной дате или дате с временем.

Если сумма приводит к значению вне границ типа данных, результат не определен.

Синтаксис

date_add(unit, value, date)

Альтернативный синтаксис:

date_add(date, INTERVAL value unit)

Псевдонимы: dateAdd, DATE_ADD.

Аргументы

  • unit — тип интервала для добавления. Обратите внимание: это не String и, следовательно, не должен быть заключен в кавычки. Возможные значения:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value — значение интервала для добавления. Int.

  • date — дата или дата с временем, к которой добавляется value. Date, Date32, DateTime или DateTime64.

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

Дата или дата с временем, полученная путем добавления value, выраженного в unit, к date. Date, Date32, DateTime или DateTime64.

Пример

SELECT date_add(YEAR, 3, toDate('2018-01-01'));

Результат:

┌─plus(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                    2021-01-01 │
└───────────────────────────────────────────────┘
SELECT date_add(toDate('2018-01-01'), INTERVAL 3 YEAR);

Результат:

┌─plus(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                    2021-01-01 │
└───────────────────────────────────────────────┘

Смотрите также

date_sub

Вычитает временной интервал или датный интервал из заданной даты или даты с временем.

Если разность приводит к значению вне границ типа данных, результат не определен.

Синтаксис

date_sub(unit, value, date)

Альтернативный синтаксис:

date_sub(date, INTERVAL value unit)

Псевдонимы: dateSub, DATE_SUB.

Аргументы

  • unit — тип интервала для вычитания. Обратите внимание: это не String и, следовательно, не должен быть заключен в кавычки.

    Возможные значения:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value — значение интервала для вычитания. Int.

  • date — дата или дата с временем, из которой вычитается value. Date, Date32, DateTime или DateTime64.

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

Дата или дата с временем, полученная путем вычитания value, выраженного в unit, из date. Date, Date32, DateTime или DateTime64.

Пример

SELECT date_sub(YEAR, 3, toDate('2018-01-01'));

Результат:

┌─minus(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                     2015-01-01 │
└────────────────────────────────────────────────┘
SELECT date_sub(toDate('2018-01-01'), INTERVAL 3 YEAR);

Результат:

┌─minus(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                     2015-01-01 │
└────────────────────────────────────────────────┘

Смотрите также

timestamp_add

Добавляет указанное временное значение к заданной дате или дате с временем.

Если сумма приводит к значению вне границ типа данных, результат не определен.

Синтаксис

timestamp_add(date, INTERVAL value unit)

Псевдонимы: timeStampAdd, TIMESTAMP_ADD.

Аргументы

  • date — Дата или дата с временем. Date, Date32, DateTime или DateTime64.

  • value — значение интервала для добавления. Int.

  • unit — тип интервала для добавления. String. Возможные значения:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year

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

Дата или дата с временем, к которой добавлен указанный value, выраженный в unit. Date, Date32, DateTime или DateTime64.

Пример

select timestamp_add(toDate('2018-01-01'), INTERVAL 3 MONTH);

Результат:

┌─plus(toDate('2018-01-01'), toIntervalMonth(3))─┐
│                                     2018-04-01 │
└────────────────────────────────────────────────┘

timestamp_sub

Вычитает временной интервал из заданной даты или даты с временем.

Если разность приводит к значению вне границ типа данных, результат не определен.

Синтаксис

timestamp_sub(unit, value, date)

Псевдонимы: timeStampSub, TIMESTAMP_SUB.

Аргументы

  • unit — тип интервала для вычитания. String. Возможные значения:

    • second
    • minute
    • hour
    • day
    • week
    • month
    • quarter
    • year
  • value — значение интервала для вычитания. Int.

  • date — дата или дата с временем. Date, Date32, DateTime или DateTime64.

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

Дата или дата с временем, полученная путем вычитания value, выраженного в unit, из date. Date, Date32, DateTime или DateTime64.

Пример

select timestamp_sub(MONTH, 5, toDateTime('2018-12-18 01:02:03'));

Результат:

┌─minus(toDateTime('2018-12-18 01:02:03'), toIntervalMonth(5))─┐
│                                          2018-07-18 01:02:03 │
└──────────────────────────────────────────────────────────────┘

addDate

Добавляет временной интервал к заданной дате, дате с временем или строковому представлению даты / даты с временем.

Если сумма приводит к значению вне границ типа данных, результат не определен.

Синтаксис

addDate(date, interval)

Аргументы

  • date — дата или дата с временем, к которой добавляется interval. Date, Date32, DateTime, DateTime64 или String
  • interval — интервал, который нужно добавить. Interval.

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

Дата или дата с временем, полученная путем добавления interval к date. Date, Date32, DateTime или DateTime64.

Пример

SELECT addDate(toDate('2018-01-01'), INTERVAL 3 YEAR);

Результат:

┌─addDate(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                       2021-01-01 │
└──────────────────────────────────────────────────┘

Псевдоним: ADDDATE

Смотрите также

subDate

Вычитает временной интервал из заданной даты, даты с временем или строкового представления даты / даты с временем.

Если разность приводит к значению вне границ типа данных, результат не определен.

Синтаксис

subDate(date, interval)

Аргументы

  • date — дата или дата с временем, из которой вычитается interval. Date, Date32, DateTime, DateTime64 или String
  • interval — интервал, который нужно вычесть. Interval.

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

Дата или дата с временем, полученная путем вычитания interval из date. Date, Date32, DateTime или DateTime64.

Пример

SELECT subDate(toDate('2018-01-01'), INTERVAL 3 YEAR);

Результат:

┌─subDate(toDate('2018-01-01'), toIntervalYear(3))─┐
│                                       2015-01-01 │
└──────────────────────────────────────────────────┘

Псевдоним: SUBDATE

Смотрите также

now

Возвращает текущую дату и время в момент анализа запроса. Функция является постоянным выражением.

Псевдоним: current_timestamp.

Синтаксис

now([timezone])

Аргументы

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

  • Текущая дата и время. DateTime.

Пример

Запрос без часового пояса:

SELECT now();

Результат:

┌───────────────now()─┐
│ 2020-10-17 07:42:09 │
└─────────────────────┘

Запрос с указанным часовым поясом:

SELECT now('Asia/Istanbul');

Результат:

┌─now('Asia/Istanbul')─┐
│  2020-10-17 10:42:23 │
└──────────────────────┘

now64

Возвращает текущую дату и время с субсекундной точностью в момент анализа запроса. Функция является постоянным выражением.

Синтаксис

now64([scale], [timezone])

Аргументы

  • scale - Размер тика (точность): 10-precision секунд. Допустимый диапазон: [ 0 : 9 ]. Обычно используются - 3 (по умолчанию) (миллисекунды), 6 (микросекунды), 9 (наносекунды).
  • timezoneИмя часового пояса для возвращаемого значения (опционально). String.

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

  • Текущая дата и время с субсекундной точностью. DateTime64.

Пример

SELECT now64(), now64(9, 'Asia/Istanbul');

Результат:

┌─────────────────now64()─┬─────now64(9, 'Asia/Istanbul')─┐
│ 2022-08-21 19:34:26.196 │ 2022-08-21 22:34:26.196542766 │
└─────────────────────────┴───────────────────────────────┘

nowInBlock

Возвращает текущую дату и время в момент обработки каждого блока данных. В отличие от функции now, это не постоянное выражение, и возвращаемое значение будет отличаться в разных блоках для долгих запросов.

Имеет смысл использовать эту функцию для генерации текущего времени в длительных запросах INSERT SELECT.

Синтаксис

nowInBlock([timezone])

Аргументы

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

  • Текущая дата и время в момент обработки каждого блока данных. DateTime.

Пример

SELECT
    now(),
    nowInBlock(),
    sleep(1)
FROM numbers(3)
SETTINGS max_block_size = 1
FORMAT PrettyCompactMonoBlock

Результат:

┌───────────────now()─┬────────nowInBlock()─┬─sleep(1)─┐
│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:19 │        0 │
│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:20 │        0 │
│ 2022-08-21 19:41:19 │ 2022-08-21 19:41:21 │        0 │
└─────────────────────┴─────────────────────┴──────────┘

today

Возвращает текущую дату в момент анализа запроса. Это то же самое, что и 'toDate(now())', и имеет псевдонимы: curdate, current_date.

Синтаксис

today()

Аргументы

  • Нет

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

Пример

Запрос:

SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty

Результат:

Запуск запроса выше 3 марта 2024 года вернул бы следующий ответ:

┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃      today ┃    curdate ┃ current_date ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ 2024-03-03 │ 2024-03-03 │   2024-03-03 │
└────────────┴────────────┴──────────────┘

yesterday

Принимает ноль аргументов и возвращает дату вчерашнего дня в один из моментов анализа запроса. То же самое, что и 'today() - 1'.

timeSlot

Округляет время до начала полузначного интервала длиной в полчаса.

Синтаксис

timeSlot(time[, time_zone])

Аргументы

  • time — Время, которое нужно округлить до начала полузначного интервала длиной в полчаса. DateTime/Date32/DateTime64.
  • time_zone — Константное значение типа String или выражение, представляющее часовой пояс. String.
примечание

Хотя эта функция может принимать значения расширенных типов Date32 и DateTime64 в качестве аргумента, передача времени вне нормального диапазона (год 1970 до 2149 для Date / 2106 для DateTime) приведет к неправильным результатам.

Тип возвращаемого значения

  • Возвращает время, округленное до начала полузначного интервала длиной в полчаса. DateTime.

Пример

Запрос:

SELECT timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'));

Результат:

┌─timeSlot(toDateTime('2000-01-02 03:04:05', 'UTC'))─┐
│                                2000-01-02 03:00:00 │
└────────────────────────────────────────────────────┘

toYYYYMM

Преобразует дату или дату с временем в число UInt32, содержащее номер года и месяца (YYYY * 100 + MM). Принимает второй необязательный аргумент часового пояса. Если он указан, часовой пояс должен быть строковой константой.

Эта функция является обратной функцией YYYYMMDDToDate().

Пример

SELECT
    toYYYYMM(now(), 'US/Eastern')

Результат:

┌─toYYYYMM(now(), 'US/Eastern')─┐
│                        202303 │
└───────────────────────────────┘

toYYYYMMDD

Преобразует дату или дату с временем в число UInt32, содержащее номер года, месяца и дня (YYYY * 10000 + MM * 100 + DD). Принимает второй необязательный аргумент часового пояса. Если он указан, часовой пояс должен быть строковой константой.

Пример

SELECT toYYYYMMDD(now(), 'US/Eastern')

Результат:

┌─toYYYYMMDD(now(), 'US/Eastern')─┐
│                        20230302 │
└─────────────────────────────────┘

toYYYYMMDDhhmmss

Преобразует дату или дату с временем в число UInt64, содержащее номер года, месяца, дня, часов, минут и секунд (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss). Принимает второй необязательный аргумент часового пояса. Если он указан, часовой пояс должен быть строковой константой.

Пример

SELECT toYYYYMMDDhhmmss(now(), 'US/Eastern')

Результат:

┌─toYYYYMMDDhhmmss(now(), 'US/Eastern')─┐
│                        20230302112209 │
└───────────────────────────────────────┘

YYYYMMDDToDate

Преобразует число, содержащее номер года, месяца и дня, в Date.

Эта функция является обратной функцией toYYYYMMDD().

Результат не определен, если входное значение не кодирует допустимое значение даты.

Синтаксис

YYYYMMDDToDate(yyyymmdd);

Аргументы

  • yyyymmdd - Число, представляющее год, месяц и день. Integer, Float или Decimal.

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

  • дата, созданная из аргументов. Date.

Пример

SELECT YYYYMMDDToDate(20230911);

Результат:

┌─toYYYYMMDD(20230911)─┐
│           2023-09-11 │
└──────────────────────┘

YYYYMMDDToDate32

Как функция YYYYMMDDToDate(), но создает Date32.

YYYYMMDDhhmmssToDateTime

Преобразует число, содержащие номер года, месяца, дня, часов, минут и секунд, в DateTime.

Результат не определен, если входное значение не кодирует допустимое значение DateTime.

Эта функция является обратной функцией toYYYYMMDDhhmmss().

Синтаксис

YYYYMMDDhhmmssToDateTime(yyyymmddhhmmss[, timezone]);

Аргументы

  • yyyymmddhhmmss - Число, представляющее год, месяц и день. Integer, Float или Decimal.
  • timezone - Часовой пояс для возвращаемого значения (опционально).

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

  • дата с временем, созданная из аргументов. DateTime.

Пример

SELECT YYYYMMDDToDateTime(20230911131415);

Результат:

┌──────YYYYMMDDhhmmssToDateTime(20230911131415)─┐
│                           2023-09-11 13:14:15 │
└───────────────────────────────────────────────┘

YYYYMMDDhhmmssToDateTime64

Как функция YYYYMMDDhhmmssToDate(), но создает DateTime64.

Принимает дополнительный, необязательный параметр precision после параметра timezone.

changeYear

Изменяет компонент года даты или даты с временем.

Синтаксис


changeYear(date_or_datetime, value)

Аргументы

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

  • Тот же тип, что и date_or_datetime.

Пример

SELECT changeYear(toDate('1999-01-01'), 2000), changeYear(toDateTime64('1999-01-01 00:00:00.000', 3), 2000);

Результат:

┌─changeYear(toDate('1999-01-01'), 2000)─┬─changeYear(toDateTime64('1999-01-01 00:00:00.000', 3), 2000)─┐
│                             2000-01-01 │                                      2000-01-01 00:00:00.000 │
└────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

changeMonth

Изменяет компонент месяца даты или даты с временем.

Синтаксис

changeMonth(date_or_datetime, value)

Аргументы

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

  • Возвращает значение того же типа, что и date_or_datetime.

Пример

SELECT changeMonth(toDate('1999-01-01'), 2), changeMonth(toDateTime64('1999-01-01 00:00:00.000', 3), 2);

Результат:

┌─changeMonth(toDate('1999-01-01'), 2)─┬─changeMonth(toDateTime64('1999-01-01 00:00:00.000', 3), 2)─┐
│                           1999-02-01 │                                    1999-02-01 00:00:00.000 │
└──────────────────────────────────────┴────────────────────────────────────────────────────────────┘

changeDay

Изменяет компонент дня даты или даты с временем.

Синтаксис

changeDay(date_or_datetime, value)

Аргументы

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

  • Возвращает значение того же типа, что и date_or_datetime.

Пример

SELECT changeDay(toDate('1999-01-01'), 5), changeDay(toDateTime64('1999-01-01 00:00:00.000', 3), 5);

Результат:

┌─changeDay(toDate('1999-01-01'), 5)─┬─changeDay(toDateTime64('1999-01-01 00:00:00.000', 3), 5)─┐
│                         1999-01-05 │                                  1999-01-05 00:00:00.000 │
└────────────────────────────────────┴──────────────────────────────────────────────────────────┘
title: 'Изменение времени и добавление интервалов'
sidebar_label: 'Изменение времени и добавление интервалов'
keywords: ['Изменение', 'Интервалы', 'Даты']
description: 'Изменение компонентов времени и добавление интервалов к датам в ClickHouse'

changeHour

Изменяет компонент часа в дате или дате с временем.

Синтаксис

changeHour(date_or_datetime, value)

Аргументы

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

  • Возвращает значение того же типа, что и date_or_datetime. Если входные данные - Дата, возвращает DateTime. Если входные данные - Date32, возвращает DateTime64.

Пример

SELECT changeHour(toDate('1999-01-01'), 14), changeHour(toDateTime64('1999-01-01 00:00:00.000', 3), 14);

Результат:

┌─changeHour(toDate('1999-01-01'), 14)─┬─changeHour(toDateTime64('1999-01-01 00:00:00.000', 3), 14)─┐
│                  1999-01-01 14:00:00 │                                    1999-01-01 14:00:00.000 │
└──────────────────────────────────────┴────────────────────────────────────────────────────────────┘

changeMinute

Изменяет компонент минуты в дате или дате с временем.

Синтаксис

changeMinute(date_or_datetime, value)

Аргументы

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

  • Возвращает значение того же типа, что и date_or_datetime. Если входные данные - Дата, возвращает DateTime. Если входные данные - Date32, возвращает DateTime64.

Пример

SELECT changeMinute(toDate('1999-01-01'), 15), changeMinute(toDateTime64('1999-01-01 00:00:00.000', 3), 15);

Результат:

┌─changeMinute(toDate('1999-01-01'), 15)─┬─changeMinute(toDateTime64('1999-01-01 00:00:00.000', 3), 15)─┐
│                    1999-01-01 00:15:00 │                                      1999-01-01 00:15:00.000 │
└────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

changeSecond

Изменяет компонент секунды в дате или дате с временем.

Синтаксис

changeSecond(date_or_datetime, value)

Аргументы

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

  • Возвращает значение того же типа, что и date_or_datetime. Если входные данные - Дата, возвращает DateTime. Если входные данные - Date32, возвращает DateTime64.

Пример

SELECT changeSecond(toDate('1999-01-01'), 15), changeSecond(toDateTime64('1999-01-01 00:00:00.000', 3), 15);

Результат:

┌─changeSecond(toDate('1999-01-01'), 15)─┬─changeSecond(toDateTime64('1999-01-01 00:00:00.000', 3), 15)─┐
│                    1999-01-01 00:00:15 │                                      1999-01-01 00:00:15.000 │
└────────────────────────────────────────┴──────────────────────────────────────────────────────────────┘

addYears

Добавляет указанное количество лет к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addYears(date, num)

Параметры

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addYears(date, 1) AS add_years_with_date,
    addYears(date_time, 1) AS add_years_with_date_time,
    addYears(date_time_string, 1) AS add_years_with_date_time_string
┌─add_years_with_date─┬─add_years_with_date_time─┬─add_years_with_date_time_string─┐
│          2025-01-01 │      2025-01-01 00:00:00 │         2025-01-01 00:00:00.000 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘

addQuarters

Добавляет указанное количество кварталов к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addQuarters(date, num)

Параметры

  • date: Дата / дата с временем, к которой нужно добавить указанное количество кварталов. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество кварталов для добавления. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addQuarters(date, 1) AS add_quarters_with_date,
    addQuarters(date_time, 1) AS add_quarters_with_date_time,
    addQuarters(date_time_string, 1) AS add_quarters_with_date_time_string
┌─add_quarters_with_date─┬─add_quarters_with_date_time─┬─add_quarters_with_date_time_string─┐
│             2024-04-01 │         2024-04-01 00:00:00 │            2024-04-01 00:00:00.000 │
└────────────────────────┴─────────────────────────────┴────────────────────────────────────┘

addMonths

Добавляет указанное количество месяцев к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addMonths(date, num)

Параметры

  • date: Дата / дата с временем, к которой нужно добавить указанное количество месяцев. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество месяцев для добавления. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addMonths(date, 6) AS add_months_with_date,
    addMonths(date_time, 6) AS add_months_with_date_time,
    addMonths(date_time_string, 6) AS add_months_with_date_time_string
┌─add_months_with_date─┬─add_months_with_date_time─┬─add_months_with_date_time_string─┐
│           2024-07-01 │       2024-07-01 00:00:00 │          2024-07-01 00:00:00.000 │
└──────────────────────┴───────────────────────────┴──────────────────────────────────┘

addWeeks

Добавляет указанное количество недель к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addWeeks(date, num)

Параметры

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addWeeks(date, 5) AS add_weeks_with_date,
    addWeeks(date_time, 5) AS add_weeks_with_date_time,
    addWeeks(date_time_string, 5) AS add_weeks_with_date_time_string
┌─add_weeks_with_date─┬─add_weeks_with_date_time─┬─add_weeks_with_date_time_string─┐
│          2024-02-05 │      2024-02-05 00:00:00 │         2024-02-05 00:00:00.000 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘

addDays

Добавляет указанное количество дней к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addDays(date, num)

Параметры

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addDays(date, 5) AS add_days_with_date,
    addDays(date_time, 5) AS add_days_with_date_time,
    addDays(date_time_string, 5) AS add_days_with_date_time_string
┌─add_days_with_date─┬─add_days_with_date_time─┬─add_days_with_date_time_string─┐
│         2024-01-06 │     2024-01-06 00:00:00 │        2024-01-06 00:00:00.000 │
└────────────────────┴─────────────────────────┴────────────────────────────────┘

addHours

Добавляет указанное количество часов к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addHours(date, num)

Параметры

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addHours(date, 12) AS add_hours_with_date,
    addHours(date_time, 12) AS add_hours_with_date_time,
    addHours(date_time_string, 12) AS add_hours_with_date_time_string
┌─add_hours_with_date─┬─add_hours_with_date_time─┬─add_hours_with_date_time_string─┐
│ 2024-01-01 12:00:00 │      2024-01-01 12:00:00 │         2024-01-01 12:00:00.000 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘

addMinutes

Добавляет указанное количество минут к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addMinutes(date, num)

Параметры

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addMinutes(date, 20) AS add_minutes_with_date,
    addMinutes(date_time, 20) AS add_minutes_with_date_time,
    addMinutes(date_time_string, 20) AS add_minutes_with_date_time_string
┌─add_minutes_with_date─┬─add_minutes_with_date_time─┬─add_minutes_with_date_time_string─┐
│   2024-01-01 00:20:00 │        2024-01-01 00:20:00 │           2024-01-01 00:20:00.000 │
└───────────────────────┴────────────────────────────┴───────────────────────────────────┘

addSeconds

Добавляет указанное количество секунд к дате, дате с временем или строково-кодированной дате / дате с временем.

Синтаксис

addSeconds(date, num)

Параметры

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addSeconds(date, 30) AS add_seconds_with_date,
    addSeconds(date_time, 30) AS add_seconds_with_date_time,
    addSeconds(date_time_string, 30) AS add_seconds_with_date_time_string
┌─add_seconds_with_date─┬─add_seconds_with_date_time─┬─add_seconds_with_date_time_string─┐
│   2024-01-01 00:00:30 │        2024-01-01 00:00:30 │           2024-01-01 00:00:30.000 │
└───────────────────────┴────────────────────────────┴───────────────────────────────────┘

addMilliseconds

Добавляет указанное количество миллисекунд к дате с временем или строково-кодированной дате с временем.

Синтаксис

addMilliseconds(date_time, num)

Параметры

  • date_time: Дата с временем, к которой нужно добавить указанное количество миллисекунд. DateTime/DateTime64, Строка.
  • num: Количество миллисекунд для добавления. (U)Int*, Float*.

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

  • Возвращает date_time плюс num миллисекунд. DateTime64.

Пример

WITH
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addMilliseconds(date_time, 1000) AS add_milliseconds_with_date_time,
    addMilliseconds(date_time_string, 1000) AS add_milliseconds_with_date_time_string
┌─add_milliseconds_with_date_time─┬─add_milliseconds_with_date_time_string─┐
│         2024-01-01 00:00:01.000 │                2024-01-01 00:00:01.000 │
└─────────────────────────────────┴────────────────────────────────────────┘

addMicroseconds

Добавляет указанное количество микросекунд к дате с временем или строково-кодированной дате с временем.

Синтаксис

addMicroseconds(date_time, num)

Параметры

  • date_time: Дата с временем, к которой нужно добавить указанное количество микросекунд. DateTime/DateTime64, Строка.
  • num: Количество микросекунд для добавления. (U)Int*, Float*.

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

  • Возвращает date_time плюс num микросекунд. DateTime64.

Пример

WITH
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addMicroseconds(date_time, 1000000) AS add_microseconds_with_date_time,
    addMicroseconds(date_time_string, 1000000) AS add_microseconds_with_date_time_string
┌─add_microseconds_with_date_time─┬─add_microseconds_with_date_time_string─┐
│      2024-01-01 00:00:01.000000 │             2024-01-01 00:00:01.000000 │
└─────────────────────────────────┴────────────────────────────────────────┘

addNanoseconds

Добавляет указанное количество наносекунд к дате с временем или строково-кодированной дате с временем.

Синтаксис

addNanoseconds(date_time, num)

Параметры

  • date_time: Дата с временем, к которой нужно добавить указанное количество наносекунд. DateTime/DateTime64, Строка.
  • num: Количество наносекунд для добавления. (U)Int*, Float*.

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

  • Возвращает date_time плюс num наносекунд. DateTime64.

Пример

WITH
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    addNanoseconds(date_time, 1000) AS add_nanoseconds_with_date_time,
    addNanoseconds(date_time_string, 1000) AS add_nanoseconds_with_date_time_string
┌─add_nanoseconds_with_date_time─┬─add_nanoseconds_with_date_time_string─┐
│  2024-01-01 00:00:00.000001000 │         2024-01-01 00:00:00.000001000 │
└────────────────────────────────┴───────────────────────────────────────┘

addInterval

Добавляет интервал к другому интервалу или к кортежу интервалов.

Синтаксис

addInterval(interval_1, interval_2)

Параметры

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

примечание

Интервалы одного типа будут объединены в единый интервал. Например, если переданы toIntervalDay(1) и toIntervalDay(2), то результат будет (3), а не (1,1).

Пример

Запрос:

SELECT addInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH);
SELECT addInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH);
SELECT addInterval(INTERVAL 2 DAY, INTERVAL 1 DAY);

Результат:

┌─addInterval(toIntervalDay(1), toIntervalMonth(1))─┐
│ (1,1)                                             │
└───────────────────────────────────────────────────┘
┌─addInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐
│ (1,1,1)                                                                │
└────────────────────────────────────────────────────────────────────────┘
┌─addInterval(toIntervalDay(2), toIntervalDay(1))─┐
│ (3)                                             │
└─────────────────────────────────────────────────┘

addTupleOfIntervals

Последовательно добавляет кортеж интервалов к дате или дате с временем.

Синтаксис

addTupleOfIntervals(interval_1, interval_2)

Параметры

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

Пример

Запрос:

WITH toDate('2018-01-01') AS date
SELECT addTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 MONTH, INTERVAL 1 YEAR))

Результат:

┌─addTupleOfIntervals(date, (toIntervalDay(1), toIntervalMonth(1), toIntervalYear(1)))─┐
│                                                                           2019-02-02 │
└──────────────────────────────────────────────────────────────────────────────────────┘

subtractYears

Вычитает указанное количество лет из даты, даты с временем или строково-кодированной даты / даты с временем.

Синтаксис

subtractYears(date, num)

Параметры

  • date: Дата / дата с временем, из которой нужно вычесть указанное количество лет. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество лет, которые нужно вычесть. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractYears(date, 1) AS subtract_years_with_date,
    subtractYears(date_time, 1) AS subtract_years_with_date_time,
    subtractYears(date_time_string, 1) AS subtract_years_with_date_time_string
┌─subtract_years_with_date─┬─subtract_years_with_date_time─┬─subtract_years_with_date_time_string─┐
│               2023-01-01 │           2023-01-01 00:00:00 │              2023-01-01 00:00:00.000 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘

subtractQuarters

Вычитает указанное количество кварталов из даты, даты с временем или строково-кодированной даты / даты с временем.

Синтаксис

subtractQuarters(date, num)

Параметры

  • date: Дата / дата с временем, из которой нужно вычесть указанное количество кварталов. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество кварталов, которые нужно вычесть. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractQuarters(date, 1) AS subtract_quarters_with_date,
    subtractQuarters(date_time, 1) AS subtract_quarters_with_date_time,
    subtractQuarters(date_time_string, 1) AS subtract_quarters_with_date_time_string
┌─subtract_quarters_with_date─┬─subtract_quarters_with_date_time─┬─subtract_quarters_with_date_time_string─┐
│                  2023-10-01 │              2023-10-01 00:00:00 │                 2023-10-01 00:00:00.000 │
└─────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────┘

subtractMonths

Вычитает указанное количество месяцев из даты, даты с временем или строково-кодированной даты / даты с временем.

Синтаксис

subtractMonths(date, num)

Параметры

  • date: Дата / дата с временем, из которой нужно вычесть указанное количество месяцев. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество месяцев, которые нужно вычесть. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractMonths(date, 1) AS subtract_months_with_date,
    subtractMonths(date_time, 1) AS subtract_months_with_date_time,
    subtractMonths(date_time_string, 1) AS subtract_months_with_date_time_string
┌─subtract_months_with_date─┬─subtract_months_with_date_time─┬─subtract_months_with_date_time_string─┐
│                2023-12-01 │            2023-12-01 00:00:00 │               2023-12-01 00:00:00.000 │
└───────────────────────────┴────────────────────────────────┴───────────────────────────────────────┘

subtractWeeks

Вычитает указанное количество недель из даты, даты с временем или строково-кодированной даты / даты с временем.

Синтаксис

subtractWeeks(date, num)

Параметры

  • date: Дата / дата с временем, из которой нужно вычесть указанное количество недель. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество недель, которые нужно вычесть. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractWeeks(date, 1) AS subtract_weeks_with_date,
    subtractWeeks(date_time, 1) AS subtract_weeks_with_date_time,
    subtractWeeks(date_time_string, 1) AS subtract_weeks_with_date_time_string
 ┌─subtract_weeks_with_date─┬─subtract_weeks_with_date_time─┬─subtract_weeks_with_date_time_string─┐
 │               2023-12-25 │           2023-12-25 00:00:00 │              2023-12-25 00:00:00.000 │
 └──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘

subtractDays

Вычитает указанное количество дней из даты, даты с временем или строково-кодированной даты / даты с временем.

Синтаксис

subtractDays(date, num)

Параметры

  • date: Дата / дата с временем, из которой нужно вычесть указанное количество дней. Дата/Date32/DateTime/DateTime64, Строка.
  • num: Количество дней, которые нужно вычесть. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractDays(date, 31) AS subtract_days_with_date,
    subtractDays(date_time, 31) AS subtract_days_with_date_time,
    subtractDays(date_time_string, 31) AS subtract_days_with_date_time_string
┌─subtract_days_with_date─┬─subtract_days_with_date_time─┬─subtract_days_with_date_time_string─┐
│              2023-12-01 │          2023-12-01 00:00:00 │             2023-12-01 00:00:00.000 │
└─────────────────────────┴──────────────────────────────┴─────────────────────────────────────┘

subtractHours

Вычитает указанное количество часов из даты, даты с временем или строково-кодированной даты / даты с временем.

Синтаксис

subtractHours(date, num)

Параметры

  • date: Дата / дата с временем, из которой нужно вычесть указанное количество часов. Дата/Date32/Datetime/Datetime64, Строка.
  • num: Количество часов, которые нужно вычесть. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractHours(date, 12) AS subtract_hours_with_date,
    subtractHours(date_time, 12) AS subtract_hours_with_date_time,
    subtractHours(date_time_string, 12) AS subtract_hours_with_date_time_string
┌─subtract_hours_with_date─┬─subtract_hours_with_date_time─┬─subtract_hours_with_date_time_string─┐
│      2023-12-31 12:00:00 │           2023-12-31 12:00:00 │              2023-12-31 12:00:00.000 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘
title: 'subtractMinutes'
sidebar_label: 'subtractMinutes'
keywords: ['subtract', 'minutes', 'date', 'dateTime']
description: 'Вычитает указанное количество минут из даты, даты с временем или строкового представления даты / даты с временем.'

subtractMinutes

Вычитает указанное количество минут из даты, даты с временем или строкового представления даты / даты с временем.

Синтаксис

subtractMinutes(date, num)

Параметры

  • date: Дата / дата с временем, из которой необходимо вычесть указанное количество минут. Date/Date32/DateTime/DateTime64, String.
  • num: Количество минут для вычитания. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractMinutes(date, 30) AS subtract_minutes_with_date,
    subtractMinutes(date_time, 30) AS subtract_minutes_with_date_time,
    subtractMinutes(date_time_string, 30) AS subtract_minutes_with_date_time_string
┌─subtract_minutes_with_date─┬─subtract_minutes_with_date_time─┬─subtract_minutes_with_date_time_string─┐
│        2023-12-31 23:30:00 │             2023-12-31 23:30:00 │                2023-12-31 23:30:00.000 │
└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘

subtractSeconds

Вычитает указанное количество секунд из даты, даты с временем или строкового представления даты / даты с временем.

Синтаксис

subtractSeconds(date, num)

Параметры

  • date: Дата / дата с временем, из которой необходимо вычесть указанное количество секунд. Date/Date32/DateTime/DateTime64, String.
  • num: Количество секунд для вычитания. (U)Int*, Float*.

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

Пример

WITH
    toDate('2024-01-01') AS date,
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractSeconds(date, 60) AS subtract_seconds_with_date,
    subtractSeconds(date_time, 60) AS subtract_seconds_with_date_time,
    subtractSeconds(date_time_string, 60) AS subtract_seconds_with_date_time_string
┌─subtract_seconds_with_date─┬─subtract_seconds_with_date_time─┬─subtract_seconds_with_date_time_string─┐
│        2023-12-31 23:59:00 │             2023-12-31 23:59:00 │                2023-12-31 23:59:00.000 │
└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘

subtractMilliseconds

Вычитает указанное количество миллисекунд из даты с временем или строкового представления даты с временем.

Синтаксис

subtractMilliseconds(date_time, num)

Параметры

  • date_time: Дата с временем, из которой необходимо вычесть указанное количество миллисекунд. DateTime/DateTime64, String.
  • num: Количество миллисекунд для вычитания. (U)Int*, Float*.

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

  • Возвращает date_time минус num миллисекунд. DateTime64.

Пример

WITH
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractMilliseconds(date_time, 1000) AS subtract_milliseconds_with_date_time,
    subtractMilliseconds(date_time_string, 1000) AS subtract_milliseconds_with_date_time_string
┌─subtract_milliseconds_with_date_time─┬─subtract_milliseconds_with_date_time_string─┐
│              2023-12-31 23:59:59.000 │                     2023-12-31 23:59:59.000 │
└──────────────────────────────────────┴─────────────────────────────────────────────┘

subtractMicroseconds

Вычитает указанное количество микросекунд из даты с временем или строкового представления даты с временем.

Синтаксис

subtractMicroseconds(date_time, num)

Параметры

  • date_time: Дата с временем, из которой необходимо вычесть указанное количество микросекунд. DateTime/DateTime64, String.
  • num: Количество микросекунд для вычитания. (U)Int*, Float*.

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

  • Возвращает date_time минус num микросекунд. DateTime64.

Пример

WITH
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractMicroseconds(date_time, 1000000) AS subtract_microseconds_with_date_time,
    subtractMicroseconds(date_time_string, 1000000) AS subtract_microseconds_with_date_time_string
┌─subtract_microseconds_with_date_time─┬─subtract_microseconds_with_date_time_string─┐
│           2023-12-31 23:59:59.000000 │                  2023-12-31 23:59:59.000000 │
└──────────────────────────────────────┴─────────────────────────────────────────────┘

subtractNanoseconds

Вычитает указанное количество наносекунд из даты с временем или строкового представления даты с временем.

Синтаксис

subtractNanoseconds(date_time, num)

Параметры

  • date_time: Дата с временем, из которой необходимо вычесть указанное количество наносекунд. DateTime/DateTime64, String.
  • num: Количество наносекунд для вычитания. (U)Int*, Float*.

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

  • Возвращает date_time минус num наносекунд. DateTime64.

Пример

WITH
    toDateTime('2024-01-01 00:00:00') AS date_time,
    '2024-01-01 00:00:00' AS date_time_string
SELECT
    subtractNanoseconds(date_time, 1000) AS subtract_nanoseconds_with_date_time,
    subtractNanoseconds(date_time_string, 1000) AS subtract_nanoseconds_with_date_time_string
┌─subtract_nanoseconds_with_date_time─┬─subtract_nanoseconds_with_date_time_string─┐
│       2023-12-31 23:59:59.999999000 │              2023-12-31 23:59:59.999999000 │
└─────────────────────────────────────┴────────────────────────────────────────────┘

subtractInterval

Добавляет отрицательный интервал к другому интервалу или кортежу интервалов.

Синтаксис

subtractInterval(interval_1, interval_2)

Параметры

  • interval_1: Первый интервал или интервал кортежей. interval, tuple(interval).
  • interval_2: Второй интервал, который будет преобразован в отрицательный. interval.

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

  • Возвращает кортеж интервалов. tuple(interval).
примечание

Интервалы одного и того же типа будут объединены в один интервал. Например, если передать toIntervalDay(2) и toIntervalDay(1), то результатом будет (1), а не (2,1).

Пример

Запрос:

SELECT subtractInterval(INTERVAL 1 DAY, INTERVAL 1 MONTH);
SELECT subtractInterval((INTERVAL 1 DAY, INTERVAL 1 YEAR), INTERVAL 1 MONTH);
SELECT subtractInterval(INTERVAL 2 DAY, INTERVAL 1 DAY);

Результат:

┌─subtractInterval(toIntervalDay(1), toIntervalMonth(1))─┐
│ (1,-1)                                                 │
└────────────────────────────────────────────────────────┘
┌─subtractInterval((toIntervalDay(1), toIntervalYear(1)), toIntervalMonth(1))─┐
│ (1,1,-1)                                                                    │
└─────────────────────────────────────────────────────────────────────────────┘
┌─subtractInterval(toIntervalDay(2), toIntervalDay(1))─┐
│ (1)                                                  │
└──────────────────────────────────────────────────────┘

subtractTupleOfIntervals

Последовательно вычитает кортеж интервалов из даты или DateTime.

Синтаксис

subtractTupleOfIntervals(interval_1, interval_2)

Параметры

  • date: Первая дата или интервал кортежей. Date/Date32/DateTime/DateTime64.
  • intervals: Кортеж интервалов, которые нужно вычесть из date. tuple(interval).

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

Пример

Запрос:

WITH toDate('2018-01-01') AS date SELECT subtractTupleOfIntervals(date, (INTERVAL 1 DAY, INTERVAL 1 YEAR))

Результат:

┌─subtractTupleOfIntervals(date, (toIntervalDay(1), toIntervalYear(1)))─┐
│                                                            2016-12-31 │
└───────────────────────────────────────────────────────────────────────┘

timeSlots

Для временного интервала, начинающегося с 'StartTime' и продолжающегося 'Duration' секунд, возвращает массив моментов времени, состоящий из точек этого интервала, округленных вниз до 'Size' в секундах. 'Size' — это необязательный параметр, по умолчанию равный 1800 (30 минут). Это необходимо, например, при поиске просмотров страниц в соответствующей сессии. Принимает DateTime и DateTime64 в качестве аргумента 'StartTime'. Для DateTime аргументы 'Duration' и 'Size' должны быть UInt32. Для 'DateTime64' они должны быть Decimal64. Возвращает массив DateTime/DateTime64 (тип возвращаемого значения соответствует типу 'StartTime'). Для DateTime64 масштаб возвращаемого значения может отличаться от масштаба 'StartTime' — берется наивысший масштаб среди всех переданных аргументов.

Синтаксис

timeSlots(StartTime, Duration,\[, Size\])

Пример

SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600));
SELECT timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299);
SELECT timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0));

Результат:

┌─timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600))─┐
│ ['2012-01-01 12:00:00','2012-01-01 12:30:00']               │
└─────────────────────────────────────────────────────────────┘
┌─timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299)─┐
│ ['1980-12-12 20:56:13','1980-12-12 21:01:12','1980-12-12 21:06:11']     │
└─────────────────────────────────────────────────────────────────────────┘
┌─timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0))─┐
│ ['1980-12-12 20:56:13.0000','1980-12-12 21:01:12.0000','1980-12-12 21:06:11.0000']                        │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘

formatDateTime

Форматирует время в соответствии с указанной строкой формата. Формат является константным выражением, поэтому вы не можете использовать несколько форматов для одного столбца результата.

formatDateTime использует стиль формата даты и времени MySQL, смотрите https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format.

Обратной операцией этой функции является parseDateTime.

Псевдоним: DATE_FORMAT.

Синтаксис

formatDateTime(Time, Format[, Timezone])

Возвращаемое значение(я)

Возвращает значения времени и даты в соответствии с определенным форматом.

Замена полей

Используя поля замены, вы можете определить шаблон для результирующей строки. Столбец "Пример" показывает результат форматирования для 2018-01-02 22:33:44.

ЗаполнительОписаниеПример
%aсокращенное название дня недели (Пн-Вс)Пн
%bсокращенное название месяца (Янв-Дек)Янв
%cмесяц в виде целого числа (01-12), см. 'Примечание 4' ниже01
%Cгод, деленный на 100 и округленный до целого (00-99)20
%dдень месяца, с нулевым дополнением (01-31)02
%Dкороткая дата MM/DD/YY, эквивалентная %m/%d/%y01/02/18
%eдень месяца, с добавлением пробела ( 1-31), см. 'Примечание 5' ниже  2
%fдробная секунда, см. 'Примечание 1' и 'Примечание 2' ниже123456
%Fкороткая дата YYYY-MM-DD, эквивалентная %Y-%m-%d2018-01-02
%gдвухзначный формат года, выравненный по ISO 8601, сокращенный из четырехзначной нотации18
%Gчетырехзначный формат года для номера недели ISO, рассчитанный по годовому номеру на основе недели определяемым стандартом ISO 8601, обычно полезен только с %V2018
%hчас в 12-часовом формате (01-12)09
%Hчас в 24-часовом формате (00-23)22
%iминута (00-59)33
%Iчас в 12-часовом формате (01-12)10
%jдень года (001-366)002
%kчас в 24-часовом формате (00-23), см. 'Примечание 4' ниже14
%lчас в 12-часовом формате (01-12), см. 'Примечание 4' ниже09
%mмесяц в виде целого числа (01-12)01
%Mполное название месяца (Январь-Декабрь), см. 'Примечание 3' нижеЯнварь
%nсимвол новой строки ('')
%pобозначение AM или PMPM
%QКвартал (1-4)1
%r12-часовое время HH:MM AM/PM, эквивалентное %h:%i %p10:30 PM
%R24-часовое время HH:MM, эквивалентное %H:%i22:33
%sсекунда (00-59)44
%Sсекунда (00-59)44
%tсимвол горизонтальной табуляции (')
%Tформат времени ISO 8601 (HH:MM:SS), эквивалентный %H:%i:%S22:33:44
%uдень недели ISO 8601 в виде числа с понедельником как 1 (1-7)2
%Vномер недели ISO 8601 (01-53)01
%wдень недели в виде числа с воскресеньем как 0 (0-6)2
%Wполное название дня недели (Понедельник-Воскресенье)Понедельник
%yГод, последние две цифры (00-99)18
%YГод2018
%zСмещение времени от UTC в формате +HHMM или -HHMM-0500
%%знак %%

Примечание 1: В версиях ClickHouse, ранее v23.4, %f выводит один ноль (0), если отформатированное значение является датой, Date32 или DateTime (у которых нет дробных секунд) или DateTime64 с точностью 0. Предыдущее поведение можно восстановить, используя настройку formatdatetime_f_prints_single_zero = 1.

Примечание 2: В версиях ClickHouse, ранее v25.1, %f выводит столько цифр, сколько указано в масштабе DateTime64, вместо фиксированных 6 цифр. Предыдущее поведение можно восстановить, используя настройку formatdatetime_f_prints_scale_number_of_digits= 1.

Примечание 3: В версиях ClickHouse, ранее v23.4, %M выводит минуту (00-59) вместо полного названия месяца (Январь-Декабрь). Предыдущее поведение можно восстановить, используя настройку formatdatetime_parsedatetime_m_is_month_name = 0.

Примечание 4: В версиях ClickHouse, ранее v23.11, функция parseDateTime требовала ведущих нулей для форматов %c (месяц) и %l/%k (час), например, 07. В более поздних версиях ведущий нуль можно опустить, например, 7. Предыдущее поведение можно восстановить, используя настройку parsedatetime_parse_without_leading_zeros = 0. Обратите внимание, что функция formatDateTime по умолчанию все еще выводит ведущие нули для %c и %l/%k, чтобы не нарушать существующие случаи использования. Это поведение можно изменить, установив настройку formatdatetime_format_without_leading_zeros = 1.

Примечание 5: В версиях ClickHouse, ранее v25.5, функция parseDateTime требовала для форматировщика %e, чтобы дни с одной цифрой дополнялись пробелом, например, 3. В более поздних версиях дополнение пробелом является необязательным, например, 3 и 3 работают. Чтобы сохранить предыдущее поведение, установите настройку parsedatetime_e_requires_space_padding = 1. Аналогично, форматировщик %e в функции formatDateTime ранее дополнительно заполнял пробелом единично напечатанные числа безусловно, в то время как теперь он выводит их без ведущего пробела. Чтобы сохранить предыдущее поведение, установите настройку formatdatetime_e_with_space_padding = 1.

Пример

SELECT formatDateTime(toDate('2010-01-04'), '%g')

Результат:

┌─formatDateTime(toDate('2010-01-04'), '%g')─┐
│ 10                                         │
└────────────────────────────────────────────┘
SELECT formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')

Результат:

┌─formatDateTime(toDateTime64('2010-01-04 12:34:56.123456', 7), '%f')─┐
│ 1234560                                                             │
└─────────────────────────────────────────────────────────────────────┘

Кроме того, функция formatDateTime может принимать третий строковый аргумент, содержащий название часового пояса. Пример: Asia/Istanbul. В этом случае время форматируется согласно указанному часовому поясу.

Пример

SELECT
    now() AS ts,
    time_zone,
    formatDateTime(ts, '%T', time_zone) AS str_tz_time
FROM system.time_zones
WHERE time_zone LIKE 'Europe%'
LIMIT 10

┌──────────────────ts─┬─time_zone─────────┬─str_tz_time─┐
│ 2023-09-08 19:13:40 │ Europe/Amsterdam  │ 21:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Andorra    │ 21:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Astrakhan  │ 23:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Athens     │ 22:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Belfast    │ 20:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Belgrade   │ 21:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Berlin     │ 21:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Bratislava │ 21:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Brussels   │ 21:13:40    │
│ 2023-09-08 19:13:40 │ Europe/Bucharest  │ 22:13:40    │
└─────────────────────┴───────────────────┴─────────────┘

См. также

formatDateTimeInJodaSyntax

Похожие на formatDateTime, за исключением того, что форматирует дату и время в стиле Joda вместо стиля MySQL. Смотрите https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html.

Обратной операцией этой функции является parseDateTimeInJodaSyntax.

Замена полей

Используя поля замены, вы можете определить шаблон для результирующей строки.

ЗаполнительОписаниеПрезентацияПримеры
GэратекстAD
Cвек эры (>=0)число20
Yгод эры (>=0)год1996
xнеделя года (пока не поддерживается)год1996
wнеделя недели (пока не поддерживается)число27
eдень неделичисло2
Eдень неделитекстВторник; Вт
yгодгод1996
Dдень годачисло189
Mмесяц годамесяцИюль; Июл; 07
dдень месяцачисло10
aполовина днятекстPM
Kчас половины дня (0~11)число0
hчас на часах половины дня (1~12)число12
Hчас дня (0~23)число0
kчас на часах дня (1~24)число24
mминута часачисло30
sсекунда минутычисло55
Sдробь секундычисло978
zчасовой поястекстВосточное стандартное время; EST
Zсмещение часового поясазона-0800; -0812
'экранирование для текстаразделитель
''одинарная кавычкалитерал'

Пример

SELECT formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')

Результат:

┌─formatDateTimeInJodaSyntax(toDateTime('2010-01-04 12:34:56'), 'yyyy-MM-dd HH:mm:ss')─┐
│ 2010-01-04 12:34:56                                                                     │
└─────────────────────────────────────────────────────────────────────────────────────────┘

dateName

Возвращает указанную часть даты.

Синтаксис

dateName(date_part, date)

Аргументы

  • date_part — Часть даты. Возможные значения: 'year', 'quarter', 'month', 'week', 'dayofyear', 'day', 'weekday', 'hour', 'minute', 'second'. String.
  • date — Дата. Date, Date32, DateTime или DateTime64.
  • timezone — Часовой пояс. Необязательно. String.

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

  • Указанная часть даты. String

Пример

WITH toDateTime('2021-04-14 11:22:33') AS date_value
SELECT
    dateName('year', date_value),
    dateName('month', date_value),
    dateName('day', date_value);

Результат:

┌─dateName('year', date_value)─┬─dateName('month', date_value)─┬─dateName('day', date_value)─┐
│ 2021                         │ April                         │ 14                          │
└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘

monthName

Возвращает название месяца.

Синтаксис

monthName(date)

Аргументы

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

Пример

WITH toDateTime('2021-04-14 11:22:33') AS date_value
SELECT monthName(date_value);

Результат:

┌─monthName(date_value)─┐
│ April                 │
└───────────────────────┘

fromUnixTimestamp

Эта функция преобразует метку времени Unix в календарную дату и время дня.

Она может быть вызвана двумя способами:

Когда передан единственный аргумент типа Целое число, она возвращает значение типа ДатаВремя, т.е. ведет себя как toDateTime.

Псевдоним: FROM_UNIXTIME.

Пример:

SELECT fromUnixTimestamp(423543535);

Результат:

┌─fromUnixTimestamp(423543535)─┐
│          1983-06-04 10:58:55 │
└──────────────────────────────┘

Когда передано два или три аргумента, где первый аргумент — это значение типа Целое число, Дата, Дата32, ДатаВремя или ДатаВремя64, второй аргумент — это строка формата константы, а третий аргумент — это необязательная строка константы временной зоны, функция возвращает значение типа Строка, т.е. ведет себя как formatDateTime. В этом случае используется стиль формата даты MySQL.

Пример:

SELECT fromUnixTimestamp(1234334543, '%Y-%m-%d %R:%S') AS DateTime;

Результат:

┌─DateTime────────────┐
│ 2009-02-11 14:42:23 │
└─────────────────────┘

См. также

fromUnixTimestampInJodaSyntax

То же самое, что и fromUnixTimestamp, но при вызове во втором варианте (два или три аргумента) форматирование выполняется с использованием стиля Joda вместо стиля MySQL.

Пример:

SELECT fromUnixTimestampInJodaSyntax(1234334543, 'yyyy-MM-dd HH:mm:ss', 'UTC') AS DateTime;

Результат:

┌─DateTime────────────┐
│ 2009-02-11 06:42:23 │
└─────────────────────┘

toModifiedJulianDay

Преобразует дату в текстовом формате Пролептического григориевского календаря YYYY-MM-DD в число Модифицированного юлианского дня в Int32. Эта функция поддерживает даты с 0000-01-01 по 9999-12-31. Она вызывает исключение, если аргумент не может быть разобран как дата, или дата неверна.

Синтаксис

toModifiedJulianDay(date)

Аргументы

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

  • Номер модифицированного юлианского дня. Int32.

Пример

SELECT toModifiedJulianDay('2020-01-01');

Результат:

┌─toModifiedJulianDay('2020-01-01')─┐
│                             58849 │
└───────────────────────────────────┘

toModifiedJulianDayOrNull

Похож на toModifiedJulianDay(), но вместо того, чтобы вызывать исключения, он возвращает NULL.

Синтаксис

toModifiedJulianDayOrNull(date)

Аргументы

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

  • Номер модифицированного юлианского дня. Nullable(Int32).

Пример

SELECT toModifiedJulianDayOrNull('2020-01-01');

Результат:

┌─toModifiedJulianDayOrNull('2020-01-01')─┐
│                                   58849 │
└─────────────────────────────────────────┘

fromModifiedJulianDay

Преобразует номер Модифицированного юлианского дня в дату в текстовом формате Пролептического григориевского календаря YYYY-MM-DD. Эта функция поддерживает номер дня с -678941 по 2973483 (что представляет собой 0000-01-01 и 9999-12-31 соответственно). Она вызывает исключение, если номер дня находится за пределами поддерживаемого диапазона.

Синтаксис

fromModifiedJulianDay(day)

Аргументы

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

  • Дата в текстовом формате. Строка

Пример

SELECT fromModifiedJulianDay(58849);

Результат:

┌─fromModifiedJulianDay(58849)─┐
│ 2020-01-01                   │
└──────────────────────────────┘

fromModifiedJulianDayOrNull

Похож на fromModifiedJulianDayOrNull(), но вместо того, чтобы вызывать исключения, он возвращает NULL.

Синтаксис

fromModifiedJulianDayOrNull(day)

Аргументы

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

Пример

SELECT fromModifiedJulianDayOrNull(58849);

Результат:

┌─fromModifiedJulianDayOrNull(58849)─┐
│ 2020-01-01                         │
└────────────────────────────────────┘

toUTCTimestamp

Преобразует значение типа ДатаВремя/ДатаВремя64 из другой временной зоны в метку времени в UTC. Эта функция в основном включена для совместимости с Apache Spark и подобными фреймворками.

Синтаксис

toUTCTimestamp(time_val, time_zone)

Аргументы

  • time_val — Константное значение типа ДатаВремя/ДатаВремя64 или выражение. Типы ДатаВремя/ДатаВремя64
  • time_zone — Константное значение типа Строка или выражение, представляющее временную зону. Типы строк

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

  • ДатаВремя/ДатаВремя64 в текстовом формате

Пример

SELECT toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai');

Результат:

┌─toUTCTimestamp(toDateTime('2023-03-16'), 'Asia/Shanghai')┐
│                                     2023-03-15 16:00:00 │
└─────────────────────────────────────────────────────────┘

fromUTCTimestamp

Преобразует значение типа ДатаВремя/ДатаВремя64 из временной зоны UTC в метку времени другой временной зоны. Эта функция в основном включена для совместимости с Apache Spark и подобными фреймворками.

Синтаксис

fromUTCTimestamp(time_val, time_zone)

Аргументы

  • time_val — Константное значение типа ДатаВремя/ДатаВремя64 или выражение. Типы ДатаВремя/ДатаВремя64
  • time_zone — Константное значение типа Строка или выражение, представляющее временную зону. Типы строк

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

  • ДатаВремя/ДатаВремя64 в текстовом формате

Пример

SELECT fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00', 3), 'Asia/Shanghai');

Результат:

┌─fromUTCTimestamp(toDateTime64('2023-03-16 10:00:00',3), 'Asia/Shanghai')─┐
│                                                 2023-03-16 18:00:00.000 │
└─────────────────────────────────────────────────────────────────────────┘

UTCTimestamp

Возвращает текущую дату и время на момент анализа запроса. Функция является константным выражением.

примечание

Эта функция дает такой же результат, что и now('UTC'). Она была добавлена только для поддержки MySQL, а now является предпочтительным использованием.

Синтаксис

UTCTimestamp()

Псевдоним: UTC_timestamp.

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

  • Возвращает текущую дату и время на момент анализа запроса. ДатаВремя.

Пример

Запрос:

SELECT UTCTimestamp();

Результат:

┌──────UTCTimestamp()─┐
│ 2024-05-28 08:32:09 │
└─────────────────────┘

timeDiff

Возвращает разницу между двумя датами или датами с временными значениями. Разница вычисляется в секундах. Это то же самое, что и dateDiff, и эта функция добавлена только для поддержки MySQL. Предпочтительным является dateDiff.

Синтаксис

timeDiff(first_datetime, second_datetime)

Аргументы

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

Разница между двумя датами или датами с временными значениями в секундах.

Пример

Запрос:

timeDiff(toDateTime64('1927-01-01 00:00:00', 3), toDate32('1927-01-02'));

Результат:

┌─timeDiff(toDateTime64('1927-01-01 00:00:00', 3), toDate32('1927-01-02'))─┐
│                                                                    86400 │
└──────────────────────────────────────────────────────────────────────────┘