Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Функции для работы с датой и временем

Большинство функций в этом разделе принимают необязательный аргумент — часовой пояс, например 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 │
└─────────────────────┴────────────┴────────────┴─────────────────────┘

UTCTimestamp

Добавленный в: v22.11.0

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

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

Синтаксис

UTCTimestamp()

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

Аргументы

  • Нет.

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

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

Примеры

Получение текущей временной метки UTC

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

YYYYMMDDToDate

Добавленный в: v23.9.0

Преобразует число, содержащее год, месяц и день, в Date. Эта функция обратна функции toYYYYMMDD(). Результат не определён, если входное значение не кодирует корректное значение Date.

Синтаксис

YYYYMMDDToDate(YYYYMMDD)

Аргументы

  • YYYYMMDD — число, содержащее год, месяц и день. (U)Int* или Float* или Decimal

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

Возвращает значение типа Date, сформированное из переданных аргументов Date

Примеры

Пример

SELECT YYYYMMDDToDate(20230911);
┌─YYYYMMDDToDate(20230911)─┐
│               2023-09-11 │
└──────────────────────────┘

YYYYMMDDToDate32

Добавленный в: v23.9.0

Преобразует число, содержащее год, месяц и день, в Date32. Эта функция является обратной для toYYYYMMDD(). Результат не определён, если входное значение не кодирует корректное значение Date32.

Синтаксис

YYYYMMDDToDate32(YYYYMMDD)

Аргументы

  • YYYYMMDD — число, содержащее год, месяц и день. (U)Int* или Float*, или Decimal

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

Возвращает значение Date32 из указанных аргументов Date32

Примеры

Пример

SELECT YYYYMMDDToDate32(20000507);
┌─YYYYMMDDToDate32(20000507)─┐
│                 2000-05-07 │
└────────────────────────────┘

YYYYMMDDhhmmssToDateTime

Добавленный в: v23.9.0

Преобразует число, содержащее год, месяц, день, час, минуту и секунду, в DateTime. Эта функция является обратной к функции toYYYYMMDDhhmmss(). Результат не определён, если входное значение не кодирует корректное значение DateTime.

Синтаксис

YYYYMMDDhhmmssToDateTime(YYYYMMDDhhmmss[, timezone])

Аргументы

  • YYYYMMDDhhmmss — Число, содержащее год, месяц, день, час, минуту и секунду. (U)Int* или Float* или Decimal
  • timezone — Название часового пояса. String

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

Возвращает значение DateTime из указанных аргументов DateTime

Примеры

Пример

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

YYYYMMDDhhmmssToDateTime64

Добавленный в: v23.9.0

Преобразует число, содержащее год, месяц, день, час, минуту и секунду, в DateTime64. Эта функция является обратной по отношению к функции toYYYYMMDDhhmmss(). Результат не определён, если входное значение не кодирует допустимое значение DateTime64.

Синтаксис

YYYYMMDDhhmmssToDateTime64(YYYYMMDDhhmmss[, precision[, timezone]])

Аргументы

  • YYYYMMDDhhmmss — Число, содержащее год, месяц, день, часы, минуты и секунды. (U)Int* или Float* или Decimal
  • precision — Точность дробной части (0-9). UInt8
  • timezone — Название часового пояса. String

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

Возвращает значение DateTime64 на основе переданных аргументов DateTime64

Примеры

Пример

SELECT YYYYMMDDhhmmssToDateTime64(20230911131415, 3, 'Asia/Istanbul');
┌─YYYYMMDDhhmmssToDateTime64(20230911131415, 3, 'Asia/Istanbul')─┐
│                                        2023-09-11 13:14:15.000 │
└────────────────────────────────────────────────────────────────┘

addDate

Добавленный в: v23.9.0

Добавляет интервал времени к указанной дате, дате и времени либо к дате или дате и времени, представленным в виде строки. Если в результате сложения получается значение, выходящее за пределы допустимого диапазона типа данных, результат не определён.

Синтаксис

addDate(datetime, interval)

Аргументы

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

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

Возвращает дату или дату и время, полученные в результате добавления interval к datetime. Date или Date32 или DateTime или DateTime64

Примеры

Добавление интервала к дате

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

addDays

Добавленный в: v1.1.0

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

Синтаксис

addDays(datetime, num)

Аргументы

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

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

Возвращает значение datetime с добавленными num днями. Date или Date32 или DateTime или DateTime64

Примеры

Добавление дней к значениям разных типов даты

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 │
└────────────────────┴─────────────────────────┴────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 day)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalDay(10))─┐
│                                          1998-06-26 │
└─────────────────────────────────────────────────────┘

addHours

Добавленный в: v1.1.0

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

Синтаксис

addHours(datetime, num)

Аргументы

  • datetime — дата или дата и время, к которым нужно добавить указанное количество часов. Date или Date32 или DateTime или DateTime64 или String
  • num — количество часов, которое нужно добавить. (U)Int* или Float*

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

Возвращает datetime с добавленными num часами. DateTime или DateTime64(3)

Примеры

Добавление часов к различным типам дат

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 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 hour)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalHour(10))─┐
│                                  1998-06-16 10:00:00 │
└──────────────────────────────────────────────────────┘

addInterval

Добавленный в: v22.11.0

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

Синтаксис

addInterval(interval_1, interval_2)

Аргументы

  • interval_1 — Первый интервал или кортеж интервалов. Interval или Tuple(Interval)
  • interval_2 — Второй добавляемый интервал. Interval

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

Возвращает кортеж интервалов Tuple(Interval)

Примеры

Добавление интервалов

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)                                             │
└─────────────────────────────────────────────────┘

addMicroseconds

Добавленный в: v22.6.0

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

Синтаксис

addMicroseconds(datetime, num)

Аргументы

  • datetime — Дата и время, к которым нужно добавить указанное количество микросекунд. 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
    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 │
└─────────────────────────────────┴────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 microsecond)
┌─plus(CAST('1998-06-16', 'DateTime'), toIntervalMicrosecond(10))─┐
│                                      1998-06-16 00:00:00.000010 │
└─────────────────────────────────────────────────────────────────┘

addMilliseconds

Добавленный в: v22.6.0

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

Синтаксис

addMilliseconds(datetime, num)

Аргументы

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

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

Возвращает datetime с добавлением 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 │
└─────────────────────────────────┴────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 10 millisecond)
┌─plus(CAST('1998-06-16', 'DateTime'), toIntervalMillisecond(10))─┐
│                                         1998-06-16 00:00:00.010 │
└─────────────────────────────────────────────────────────────────┘

addMinutes

Добавленный в: v1.1.0

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

Синтаксис

addMinutes(datetime, num)

Аргументы

  • datetime — дата или дата и время, к которым добавляется указанное количество минут. Date или Date32 или DateTime или DateTime64 или String
  • num — количество минут для добавления. (U)Int* или Float*

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

Возвращает datetime с добавленными num минутами. DateTime или DateTime64(3)

Примеры

Добавление минут к различным типам дат

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 │
└───────────────────────┴────────────────────────────┴───────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 minute)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalMinute(10))─┐
│                                    1998-06-16 00:10:00 │
└────────────────────────────────────────────────────────┘

addMonths

Добавленный в: v1.1.0

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

Синтаксис

addMonths(datetime, num)

Аргументы

  • datetime — дата или дата и время, к которым добавляется указанное количество месяцев. Date или Date32 или DateTime или DateTime64 или String
  • num — количество добавляемых месяцев. (U)Int* или Float*

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

Возвращает значение datetime плюс num месяцев. Date или Date32 или DateTime или DateTime64

Примеры

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

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 │
└──────────────────────┴───────────────────────────┴──────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 month)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalMonth(10))─┐
│                                            1999-04-16 │
└───────────────────────────────────────────────────────┘

addNanoseconds

Добавленный в: v22.6.0

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

Синтаксис

addNanoseconds(datetime, num)

Аргументы

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

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

Возвращает datetime с добавленными 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 │
└────────────────────────────────┴───────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::DateTime, INTERVAL 1000 nanosecond)
┌─plus(CAST('1998-06-16', 'DateTime'), toIntervalNanosecond(1000))─┐
│                                    1998-06-16 00:00:00.000001000 │
└──────────────────────────────────────────────────────────────────┘

addQuarters

Добавленный в: v20.1.0

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

Синтаксис

addQuarters(datetime, num)

Аргументы

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

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

Возвращает datetime с добавленными num кварталами. Date или Date32 или DateTime или DateTime64

Примеры

Добавление кварталов к значениям разных типов дат

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 │
└────────────────────────┴─────────────────────────────┴────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 quarter)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalQuarter(10))─┐
│                                              2000-12-16 │
└─────────────────────────────────────────────────────────┘

addSeconds

Добавленный в: v1.1.0

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

Синтаксис

addSeconds(datetime, num)

Аргументы

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

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

Возвращает datetime с добавленными num секундами. DateTime или DateTime64(3)

Примеры

Добавление секунд к различным типам дат

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 │
└───────────────────────┴────────────────────────────┴───────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 second)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalSecond(10))─┐
│                                    1998-06-16 00:00:10 │
└────────────────────────────────────────────────────────┘

addTupleOfIntervals

Добавленный в: v22.11.0

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

Синтаксис

addTupleOfIntervals(datetime, intervals)

Аргументы

  • datetime — дата или дата и время, к которым нужно добавить интервалы. Date или Date32 или DateTime или DateTime64
  • intervals — кортеж интервалов, которые нужно добавить к datetime. Tuple(Interval)

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

Возвращает date с добавленными intervals: Date или Date32 или DateTime или DateTime64

Примеры

Добавление кортежа интервалов к дате

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 │
└──────────────────────────────────────────────────────────────────────────────────────┘

addWeeks

Добавленный в: v1.1.0

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

Синтаксис

addWeeks(datetime, num)

Аргументы

  • datetime — дата или дата и время, к которым нужно добавить указанное количество недель. Date или Date32 или DateTime или DateTime64 или String
  • num — количество недель, которое нужно добавить. (U)Int* или Float*

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

Возвращает значение datetime с добавленными num неделями. Date или Date32 или DateTime или DateTime64

Примеры

Добавление недель к разным типам дат

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 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 week)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalWeek(10))─┐
│                                           1998-08-25 │
└──────────────────────────────────────────────────────┘

addYears

Добавленный в: v1.1.0

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

Синтаксис

addYears(datetime, num)

Аргументы

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

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

Возвращает значение datetime с добавленными num годами. Date или Date32 или DateTime или DateTime64

Примеры

Добавление лет к различным типам дат

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 │
└─────────────────────┴──────────────────────────┴─────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateAdd('1998-06-16'::Date, INTERVAL 10 year)
┌─plus(CAST('1998-06-16', 'Date'), toIntervalYear(10))─┐
│                                           2008-06-16 │
└──────────────────────────────────────────────────────┘

age

Добавленный в: v23.1.0

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

Например, разница между 2021-12-29 и 2022-01-01 составляет 3 дня для единицы day, 0 месяцев для единицы month и 0 лет для единицы year.

В качестве альтернативы age см. функцию dateDiff.

Синтаксис

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

Аргументы

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

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

Возвращает разность между enddate и startdate, выраженную в единицах unit. Int32

Примеры

Расчёт возраста в часах

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 │
└────────────┴────────────┴─────────┴───────────┴──────────┘

changeDay

Добавленный в: v24.7.0

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

Синтаксис

changeDay(date_or_datetime, value)

Аргументы

  • date_or_datetime — Значение, которое нужно изменить. Date или Date32 или DateTime или DateTime64
  • value — Новое значение. (U)Int*

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

Возвращает значение того же типа, что и date_or_datetime, с изменённым значением часа. Date или Date32 или DateTime или DateTime64

Примеры

Пример использования

SELECT changeDay('2024-01-31'::DateTime, 15)
2024-01-15 00:00:00

changeHour

Добавленный в: v24.7.0

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

Синтаксис

changeHour(date_or_datetime, value)

Аргументы

  • date_or_datetime — Значение, которое требуется изменить. Date или Date32 или DateTime или DateTime64
  • value — Новое значение. (U)Int*

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

Возвращает значение того же типа, что и date_or_datetime, с изменённым компонентом часа. DateTime или DateTime64

Примеры

Пример использования

SELECT changeHour('2024-01-01 12:00:00'::DateTime, 5)
2024-01-01 05:00:00

changeMinute

Добавленный в: v24.7.0

Изменяет компонент минут в значении Date или DateTime.

Синтаксис

changeMinute(date_or_datetime, value)

Аргументы

  • date_or_datetime — Значение, которое нужно изменить. Date или Date32 или DateTime или DateTime64
  • value — Новое значение. (U)Int*

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

Возвращает значение того же типа, что и date_or_datetime, с изменённым значением минут. DateTime или DateTime64

Примеры

Пример использования

SELECT changeMinute('2024-01-01 12:30:00'::DateTime, 45)
2024-01-01 12:45:00

changeMonth

Добавленный в: v24.7.0

Изменяет компонент месяца в значении типа Date или DateTime.

Синтаксис

changeMonth(date_or_datetime, value)

Аргументы

  • date_or_datetime — Значение, которое требуется изменить. Date или Date32 или DateTime или DateTime64
  • value — Новое значение. (U)Int*

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

Возвращает значение того же типа, что и date_or_datetime, с изменённым компонентом месяца. Date или Date32 или DateTime или DateTime64

Примеры

Пример использования

SELECT changeMonth('2024-01-01'::DateTime, 12)
2024-12-01 00:00:00

changeSecond

Добавленный в: v24.7.0

Изменяет значение секунд в Date или DateTime.

Синтаксис

changeSecond(date_or_datetime, value)

Аргументы

  • date_or_datetime — Значение, которое нужно изменить. Date или Date32 или DateTime или DateTime64
  • value — Новое значение. (U)Int*

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

Возвращает значение того же типа, что и date_or_datetime, с изменённым значением секунд. DateTime или DateTime64

Примеры

Пример использования

SELECT changeSecond('2024-01-01 12:30:45'::DateTime, 15)
2024-01-01 12:30:15

changeYear

Добавленный в: v24.7.0

Изменяет год у значения типа Date или DateTime.

Синтаксис

changeYear(date_or_datetime, value)

Аргументы

  • date_or_datetime — Значение, которое нужно изменить. Date или Date32 или DateTime или DateTime64
  • value — Новое значение. (U)Int*

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

Возвращает значение того же типа, что и date_or_datetime, с изменённым компонентом года. Date или Date32 или DateTime или DateTime64

Примеры

Пример использования

SELECT changeYear('2024-01-01'::DateTime, 2023)
2023-01-01 00:00:00

dateDiff

Добавленный в: v23.4.0

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

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

В качестве альтернативы dateDiff см. функцию age.

Синтаксис

dateDiff(unit, startdate, enddate[, timezone])

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

Аргументы

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

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

Возвращает разницу между enddate и startdate, выраженную в unit. Int64

Примеры

Расчёт разницы между датами в часах

SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res
┌─res─┐
│  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 │
└────────────┴────────────┴──────────┴────────────┴───────────┘

dateName

Добавленный в: v21.7.0

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

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

  • 'year'
  • 'quarter'
  • 'month'
  • 'week'
  • 'dayofyear'
  • 'day'
  • 'weekday'
  • 'hour'
  • 'minute'
  • 'second'

Синтаксис

dateName(date_part, date[, timezone])

Аргументы

  • date_part — Часть даты, которую требуется извлечь. String
  • datetime — Значение типа дата или дата и время. 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                          │
└──────────────────────────────┴───────────────────────────────┴─────────────────────────────┘

dateTrunc

Добавленный в: v20.8.0

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

Синтаксис

dateTrunc(unit, datetime[, timezone])

Псевдонимы: DATE_TRUNC

Аргументы

  • unit — Тип интервала, до которого нужно усечь результат. Возможные значения: nanosecond (только DateTime64), microsecond (только DateTime64), millisecond (только DateTime64), second, minute, hour, day, week, month, quarter, year. String
  • datetime — Дата и время. Date или Date32 или DateTime или DateTime64
  • timezone — Необязательно. Имя часового пояса для возвращаемого значения даты и времени. Если не указан, функция использует часовой пояс параметра datetime. String

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

Возвращает усечённое значение даты и времени.

Аргумент unit Аргумент datetime Тип возвращаемого значения
Год, квартал, месяц, неделя Date32 или DateTime64 или Date или DateTime Date32 или Date
День, час, минута, секунда Date32, DateTime64, Date или DateTime DateTime64 или DateTime
Миллисекунда, микросекунда, Любой DateTime64
Наносекунда со scale 3, 6 или 9

Примеры

Усечение без указания часового пояса

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

Усечение с указанием часового пояса

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

formatDateTime

Добавленный в: v1.1.0

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

formatDateTime использует стиль форматирования даты и времени MySQL, см. документацию MySQL.

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

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

Поля замены:

Placeholder Description Example
%a сокращённое название дня недели (Mon-Sun) Mon
%b сокращённое название месяца (Jan-Dec) Jan
%c месяц в виде целого числа (01-12) 01
%C год, разделённый на 100 и усечённый до целого числа (00-99) 20
%d день месяца с ведущим нулём (01-31) 02
%D краткая дата в формате MM/DD/YY, эквивалентно %m/%d/%y 01/02/18
%e день месяца с дополнением пробелом (1-31) 2
%f дробная часть секунды 123456
%F краткая дата в формате YYYY-MM-DD, эквивалентно %Y-%m-%d 2018-01-02
%g двузначный год по ISO 8601 18
%G четырёхзначный год для номера недели по ISO 2018
%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) 14
%l час в 12-часовом формате (01-12) 09
%m месяц в виде целого числа (01-12) 01
%M полное название месяца (January-December) January
%n символ новой строки
%p обозначение AM или PM PM
%Q квартал (1-4) 1
%r время в 12-часовом формате HH:MM AM/PM, эквивалентно %h:%i %p 10:30 PM
%R время в 24-часовом формате HH:MM, эквивалентно %H:%i 22:33
%s секунды (00-59) 44
%S секунды (00-59) 44
%t символ горизонтальной табуляции
%T время в формате ISO 8601 (HH:MM:SS), эквивалентно %H:%i:%S 22:33:44
%u день недели по ISO 8601 в виде числа, где понедельник = 1 (1-7) 2
%V номер недели по ISO 8601 (01-53) 01
%w день недели в виде целого числа, где воскресенье = 0 (0-6) 2
%W полное название дня недели (Monday-Sunday) Monday
%y год, последние две цифры (00-99) 18
%Y год 2018
%z смещение относительно UTC в формате +HHMM или -HHMM -0500
%% знак % %
  • В версиях ClickHouse до v23.4 %f выводит один ноль (0), если форматируемое значение имеет тип Date, Date32 или DateTime (у которых нет дробной части секунд) либо DateTime64 с точностью 0.
  • В версиях ClickHouse до v25.1 %f выводит столько цифр, сколько указано в scale типа DateTime64, вместо фиксированных 6 цифр.
  • В версиях ClickHouse до v23.4 %M выводит минуты (00-59) вместо полного названия месяца (January-December).

Синтаксис

formatDateTime(datetime, format[, timezone])

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

Аргументы

  • datetime — Значение Date или DateTime для форматирования. Date or Date32 or DateTime or DateTime64
  • format — Строка формата с полями замены. String
  • timezone — Необязательно. Имя часового пояса для форматируемого времени. String

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

Возвращает значение даты и времени в указанном формате. String

Примеры

Форматирование даты с плейсхолдером года

SELECT formatDateTime(toDate('2010-01-04'), '%g')
┌─formatDateTime(toDate('2010-01-04'), '%g')─┐
│ 10                                         │
└────────────────────────────────────────────┘

Форматирование DateTime64 с долями секунды

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

Формат с часовым поясом

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

Добавленный в: v20.1.0

Похожа на formatDateTime, но форматирует дату и время в стиле Joda, а не MySQL. См. документацию Joda Time.

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

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

Поля замены:

Заполнитель Описание Представление Примеры
G эра текст AD
C век эры (>=0) число 20
Y год эры (>=0) год 1996
x год нумерации недель (пока не поддерживается) год 1996
w неделя года нумерации недель (пока не поддерживается) число 27
e день недели число 2
E день недели текст Tuesday; Tue
y год год 1996
D день года число 189
M месяц года месяц July; Jul; 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 часовой пояс текст Eastern Standard Time; EST
Z смещение часового пояса зона -0800; -0812
' экранирование текста разделитель
'' одинарная кавычка литерал '

Синтаксис

formatDateTimeInJodaSyntax(datetime, format[, timezone])

Аргументы

  • datetime — Date или DateTime для форматирования. DateTime или Date или Date32 или DateTime64
  • format — Строка формата с полями замены в стиле Joda. String
  • timezone — Необязательно. Имя часового пояса для форматируемых даты и времени. String

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

Возвращает значения даты и времени в соответствии с указанным форматом. String

Примеры

Форматирование datetime с помощью синтаксиса Joda

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                                                                  │
└──────────────────────────────────────────────────────────────────────────────────────┘

fromDaysSinceYearZero

Добавленный в: v23.11.0

Для заданного числа дней, прошедших с 1 January 0000, возвращает соответствующую дату в пролептическом григорианском календаре по ISO 8601.

Вычисление выполняется так же, как в функции MySQL FROM_DAYS(). Результат не определён, если его нельзя представить в пределах типа Date.

Синтаксис

fromDaysSinceYearZero(days)

Псевдонимы: FROM_DAYS

Аргументы

  • days — Количество дней, прошедших с нулевого года. UInt32

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

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

Примеры

Преобразование числа дней с нулевого года в даты

SELECT
fromDaysSinceYearZero(739136) AS date1,
fromDaysSinceYearZero(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2
┌──────date1─┬──────date2─┐
│ 2023-09-08 │ 2023-09-08 │
└────────────┴────────────┘

fromDaysSinceYearZero32

Добавленный в: v23.11.0

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

Синтаксис

fromDaysSinceYearZero32(days)

Аргументы

  • days — Количество дней, прошедших с начала нулевого года. UInt32

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

Возвращает дату, соответствующую числу дней, прошедших с начала нулевого года. Date32

Примеры

Преобразование дней с начала нулевого года в даты

SELECT
fromDaysSinceYearZero32(739136) AS date1,
fromDaysSinceYearZero32(toDaysSinceYearZero(toDate('2023-09-08'))) AS date2
┌──────date1─┬──────date2─┐
│ 2023-09-08 │ 2023-09-08 │
└────────────┴────────────┘

fromModifiedJulianDay

Добавленный в: v21.1.0

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

Синтаксис

fromModifiedJulianDay(day)

Аргументы

  • day — номер модифицированного юлианского дня. (U)Int*

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

Возвращает дату в текстовом виде. String

Примеры

Преобразование модифицированного юлианского дня в дату

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

fromModifiedJulianDayOrNull

Добавленный в: v21.1.0

Аналогично fromModifiedJulianDay(), но вместо вызова Исключения возвращает NULL.

Синтаксис

fromModifiedJulianDayOrNull(day)

Аргументы

  • day — номер модифицированного юлианского дня. (U)Int*

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

Возвращает дату в текстовом виде для корректного аргумента day, в противном случае — null. Nullable(String)

Примеры

Преобразование модифицированного юлианского дня в дату с обработкой null

SELECT fromModifiedJulianDayOrNull(58849);
SELECT fromModifiedJulianDayOrNull(60000000); -- invalid argument, returns NULL
┌─fromModifiedJulianDayOrNull(58849)─┐
│ 2020-01-01                         │
└────────────────────────────────────┘
┌─fromModifiedJulianDayOrNull(60000000)─┐
│ ᴺᵁᴸᴸ                                  │
└───────────────────────────────────────┘

fromUTCTimestamp

Добавленный в: v22.1.0

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

Синтаксис

fromUTCTimestamp(datetime, time_zone)

Псевдонимы: from_utc_timestamp

Аргументы

  • datetime — Константное значение даты или даты и времени либо выражение. DateTime или DateTime64
  • time_zone — Константное значение типа String или выражение, задающее часовой пояс. String

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

Возвращает DateTime/DateTime64 в указанном часовом поясе. DateTime или DateTime64

Примеры

Преобразование времени из часового пояса UTC в указанный часовой пояс

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 │
└───────────────────────────────────────────────────────────────────────────┘

fromUnixTimestamp

Добавленный в: v20.8.0

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

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

  • Если передан один аргумент типа Integer, функция возвращает значение типа DateTime, то есть ведет себя как toDateTime.
  • Если переданы два или три аргумента, где первый аргумент — значение типа Integer, Date, Date32, DateTime или DateTime64, второй аргумент — константная строка формата, а третий аргумент — необязательная константная строка часового пояса, функция возвращает значение типа String, то есть ведет себя как formatDateTime. В этом случае используется стиль форматирования datetime из MySQL.

Синтаксис

fromUnixTimestamp(timestamp)
fromUnixTimestamp(timestamp[, format[, timezone]])

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

Аргументы

  • timestamp — Unix-временная метка или значение типа date/дата и время. (U)Int* или Date или Date32 или DateTime или DateTime64
  • format — Необязательно. Константная строка формата для форматирования вывода. String
  • timezone — Необязательно. Константная строка часового пояса. String

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

Возвращает DateTime, если вызвана с одним аргументом, или String, если вызвана с двумя или тремя аргументами. DateTime или String

Примеры

Преобразование Unix-временной метки в DateTime

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

Преобразование Unix-временной метки с указанием формата

SELECT fromUnixTimestamp(1234334543, '%Y-%m-%d %R:%S') AS DateTime
┌─DateTime────────────┐
│ 2009-02-11 06:42:23 │
└─────────────────────┘

fromUnixTimestampInJodaSyntax

Добавленный в: v23.1.0

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

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

Если передан один аргумент типа Integer, функция возвращает значение типа DateTime, то есть ведёт себя как toDateTime.

Если переданы два или три аргумента, где первый аргумент — значение типа Integer, Date, Date32, DateTime или DateTime64, второй аргумент — константная строка формата, а третий — необязательная константная строка с часовым поясом, функция возвращает значение типа String, то есть ведёт себя как formatDateTimeInJodaSyntax. В этом случае используется стиль форматирования даты и времени Joda.

Синтаксис

fromUnixTimestampInJodaSyntax(timestamp)
fromUnixTimestampInJodaSyntax(timestamp, format[, timezone])

Аргументы

  • timestamp — Unix-временная метка или значение даты и времени. (U)Int* или Date или Date32 или DateTime или DateTime64
  • format — Необязательно. Константная строка формата в синтаксисе Joda для форматирования вывода. String
  • timezone — Необязательно. Константная строка часового пояса. String

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

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

Примеры

Преобразование Unix-временной метки в формате Joda

SELECT fromUnixTimestampInJodaSyntax(1234334543, 'yyyy-MM-dd HH:mm:ss', 'UTC') AS DateTime
┌─DateTime────────────┐
│ 2009-02-11 06:42:23 │
└─────────────────────┘

localtime

Добавленный в: v26.7.0

Возвращает текущее время суток в часовом поясе сервера (или сеанса) на момент анализа запроса. Функция является константным выражением. Это стандартный для SQL / PostgreSQL LOCALTIME, эквивалентный CAST(now() AS Time).

Синтаксис

localtime()

Аргументы

  • Отсутствуют.

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

Возвращает текущее время суток. Time

Примеры

Стандартный синтаксис SQL без скобок

SELECT LOCALTIME
┌───────LOCALTIME─┐
│        07:42:09 │
└─────────────────┘

makeDate

Добавленный в: v22.6.0

Создаёт Date на основе:

  • года, месяца и дня
  • года и порядкового дня в году

Синтаксис

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

Аргументы

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

Возвращает значение типа Date, сформированное из указанных аргументов Date

Примеры

Date из года, месяца и дня

SELECT makeDate(2023, 2, 28) AS date;
┌───────date─┐
│ 2023-02-28 │
└────────────┘

Дата по году и дню года

SELECT makeDate(2023, 42) AS date;
┌───────date─┐
│ 2023-02-11 │
└────────────┘

makeDate32

Добавленный в: v22.6.0

Создаёт Date32, используя:

  • год, месяц и день
  • год и день года

Синтаксис

makeDate32(year, month, day)
makeDate32(year, day_of_year)

Аргументы

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

Возвращает значение Date32, созданное на основе переданных аргументов Date32

Примеры

Date32 из года, месяца и дня

SELECT makeDate(2023, 2, 28) AS date;
┌───────date─┐
│ 2023-02-28 │
└────────────┘

Date32 из года и номера дня в году

SELECT makeDate(2023, 42) AS date;
┌───────date─┐
│ 2023-02-11 │
└────────────┘

makeDateTime

Добавленный в: v22.6.0

Создаёт значение DateTime из года, месяца, дня, часа, минуты и секунды с необязательным часовым поясом.

Синтаксис

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

Аргументы

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

Возвращает значение DateTime, сформированное из указанных аргументов DateTime

Примеры

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

SELECT makeDateTime(2023, 2, 28, 17, 12, 33) AS DateTime;
┌────────────DateTime─┐
│ 2023-02-28 17:12:33 │
└─────────────────────┘

makeDateTime64

Добавленный в: v22.6.0

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

Синтаксис

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

Аргументы

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

Возвращает значение DateTime64, сформированное из указанных аргументов DateTime64

Примеры

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 │
└─────────────────────────────────────────────────┘

monthName

Добавленный в: v22.1.0

Возвращает название месяца в виде строки из значения типа «дата» или «дата и время».

Синтаксис

monthName(datetime)

Аргументы

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

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

Примеры

Получить название месяца из даты

WITH toDateTime('2021-04-14 11:22:33') AS date_value
SELECT monthName(date_value)
┌─monthName(date_value)─┐
│ April                 │
└───────────────────────┘

now

Добавленный в: v1.1.0

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

Синтаксис

now([timezone])

Псевдонимы: localtimestamp, current_timestamp

Аргументы

  • timezone — Необязательный. Имя часового пояса для возвращаемого значения. String

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

Возвращает текущие дату и время. DateTime

Примеры

Запрос без указания часового пояса

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

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

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

Стандартный синтаксис SQL без скобок

SELECT NOW, CURRENT_TIMESTAMP
┌─────────────────NOW─┬───CURRENT_TIMESTAMP─┐
│ 2020-10-17 07:42:19 │ 2020-10-17 07:42:19 │
└─────────────────────┴─────────────────────┘

now64

Добавленный в: v20.1.0

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

Синтаксис

now64([scale[, timezone]])

Аргументы

  • scale — Необязательный. Размер шага (точность): 10^-precision секунды. Допустимый диапазон: [0 : 9]. Обычно используются значения 3 (по умолчанию) — миллисекунды, 6 — микросекунды, 9 — наносекунды. UInt8
  • 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

Добавленный в: v22.8.0

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

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

Синтаксис

nowInBlock([timezone])

Аргументы

  • timezone — Необязательный параметр. Имя часового пояса для возвращаемого значения. String

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

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

Примеры

Отличие от функции now()

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 │
└─────────────────────┴─────────────────────┴──────────┘

nowInBlock64

Добавленный в: v25.8.0

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

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

Синтаксис

nowInBlock64([scale[, timezone]])

Аргументы

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

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

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

Примеры

Отличие от функции now64()

SELECT
    now64(),
    nowInBlock64(),
    sleep(1)
FROM numbers(3)
SETTINGS max_block_size = 1
FORMAT PrettyCompactMonoBlock
┌─────────────────now64()─┬──────────nowInBlock64()─┬─sleep(1)─┐
│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:29.534 │        0 │
│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:30.535 │        0 │
│ 2025-07-29 17:07:29.526 │ 2025-07-29 17:07:31.535 │        0 │
└─────────────────────────┴─────────────────────────┴──────────┘

serverTimezone

Добавленный в: v23.6.0

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

Синтаксис

serverTimezone()

Псевдонимы: serverTimeZone

Аргументы

  • Нет.

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

Возвращает часовой пояс сервера в виде String

Примеры

Пример использования

SELECT serverTimeZone()
┌─serverTimeZone()─┐
│ Etc/UTC          │
└──────────────────┘

subDate

Добавленный в: v23.9.0

Вычитает интервал времени из указанной даты, даты и времени или даты либо даты и времени в строковом формате. Если в результате вычитания получается значение, выходящее за пределы типа данных, результат не определён.

Синтаксис

subDate(datetime, interval)

Аргументы

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

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

Возвращает дату или дату и время, полученные в результате вычитания interval из datetime. Date or Date32 or DateTime or DateTime64

Примеры

Вычитание интервала из даты

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

subtractDays

Добавленный в: v1.1.0

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

Синтаксис

subtractDays(datetime, num)

Аргументы

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

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

Возвращает значение datetime за вычетом num дней Date или Date32 или DateTime или DateTime64

Примеры

Вычитание дней из значений разных типов даты

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 │
└─────────────────────────┴──────────────────────────────┴─────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 day)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalDay(10))─┐
│                                           1998-06-06 │
└──────────────────────────────────────────────────────┘

subtractHours

Добавленный в: v1.1.0

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

Синтаксис

subtractHours(datetime, num)

Аргументы

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

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

Возвращает значение datetime за вычетом num часов: DateTime или DateTime64(3)

Примеры

Вычитание часов из значений разных типов даты

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 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 hour)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalHour(10))─┐
│                                   1998-06-15 14:00:00 │
└───────────────────────────────────────────────────────┘

subtractInterval

Добавленный в: v22.11.0

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

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

Синтаксис

subtractInterval(interval_1, interval_2)

Аргументы

  • interval_1 — Первый интервал или кортеж интервалов. Interval или Tuple(Interval)
  • interval_2 — Второй интервал с противоположным знаком. Interval

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

Возвращает кортеж интервалов Tuple(T)

Примеры

Вычитание интервалов

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)                                                  │
└──────────────────────────────────────────────────────┘

subtractMicroseconds

Добавленный в: v22.6.0

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

Синтаксис

subtractMicroseconds(datetime, num)

Аргументы

  • datetime — Значение даты и времени, из которого нужно вычесть указанное количество микросекунд. DateTime или DateTime64 или String
  • num — Количество микросекунд, которое нужно вычесть. (U)Int* или Float*

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

Возвращает datetime за вычетом 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 │
└──────────────────────────────────────┴─────────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 microsecond)
┌─minus(CAST('1998-06-16', 'DateTime'), toIntervalMicrosecond(10))─┐
│                                       1998-06-15 23:59:59.999990 │
└──────────────────────────────────────────────────────────────────┘

subtractMilliseconds

Добавленный в: v22.6.0

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

Синтаксис

subtractMilliseconds(datetime, num)

Аргументы

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

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

Возвращает значение datetime за вычетом 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 │
└──────────────────────────────────────┴─────────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 millisecond)
┌─minus(CAST('1998-06-16', 'DateTime'), toIntervalMillisecond(10))─┐
│                                          1998-06-15 23:59:59.990 │
└──────────────────────────────────────────────────────────────────┘

subtractMinutes

Добавленный в: v1.1.0

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

Синтаксис

subtractMinutes(datetime, num)

Аргументы

  • datetime — дата или дата и время, из которых нужно вычесть указанное количество минут. Date или Date32 или DateTime или DateTime64 или String
  • num — количество минут, которое нужно вычесть. (U)Int* или Float*

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

Возвращает значение datetime за вычетом num минут. DateTime или DateTime64(3)

Примеры

Вычитание минут из значений разных типов даты

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 │
└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 minute)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalMinute(10))─┐
│                                     1998-06-15 23:50:00 │
└─────────────────────────────────────────────────────────┘

subtractMonths

Добавленный в: v1.1.0

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

Синтаксис

subtractMonths(datetime, num)

Аргументы

  • datetime — дата или дата и время, из которых нужно вычесть указанное количество месяцев. Date или Date32 или DateTime или DateTime64 или String
  • num — количество месяцев, которое нужно вычесть. (U)Int* или Float*

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

Возвращает datetime минус num месяцев. Date или Date32 или DateTime или DateTime64

Примеры

Вычитание месяцев из различных типов дат

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 │
└───────────────────────────┴────────────────────────────────┴───────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 month)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalMonth(10))─┐
│                                             1997-08-16 │
└────────────────────────────────────────────────────────┘

subtractNanoseconds

Добавленный в: v20.1.0

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

Синтаксис

subtractNanoseconds(datetime, num)

Аргументы

  • datetime — дата и время, из которых нужно вычесть указанное количество наносекунд. DateTime или DateTime64, или String
  • num — количество наносекунд, которое нужно вычесть. (U)Int* или Float*

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

Возвращает datetime за вычетом 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 │
└─────────────────────────────────────┴────────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::DateTime, INTERVAL 10 nanosecond)
┌─minus(CAST('1998-06-16', 'DateTime'), toIntervalNanosecond(10))─┐
│                                   1998-06-15 23:59:59.999999990 │
└─────────────────────────────────────────────────────────────────┘

subtractQuarters

Добавленный в: v20.1.0

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

Синтаксис

subtractQuarters(datetime, num)

Аргументы

  • datetime — дата или дата и время, из которых нужно вычесть указанное количество кварталов. Date or Date32 or DateTime or DateTime64 or String
  • num — количество кварталов, которое нужно вычесть. (U)Int* or Float*

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

Возвращает значение datetime за вычетом num кварталов Date or Date32 or DateTime or DateTime64

Примеры

Вычитание кварталов для разных типов дат

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 │
└─────────────────────────────┴──────────────────────────────────┴─────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 quarter)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalQuarter(10))─┐
│                                               1995-12-16 │
└──────────────────────────────────────────────────────────┘

subtractSeconds

Добавленный в: v1.1.0

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

Синтаксис

subtractSeconds(datetime, num)

Аргументы

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

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

Возвращает datetime за вычетом num секунд. DateTime или DateTime64(3)

Примеры

Вычитание секунд из различных типов дат

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 │
└────────────────────────────┴─────────────────────────────────┴────────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 second)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalSecond(10))─┐
│                                     1998-06-15 23:59:50 │
└─────────────────────────────────────────────────────────┘

subtractTupleOfIntervals

Добавленный в: v22.11.0

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

Синтаксис

subtractTupleOfIntervals(datetime, intervals)

Аргументы

  • datetime — Дата или дата и время, из которых нужно вычесть интервалы. Date или Date32 или DateTime или DateTime64
  • intervals — Кортеж интервалов, которые нужно вычесть из datetime. Tuple(Interval)

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

Возвращает date, из которого вычтены intervals: Date или Date32 или DateTime или DateTime64

Примеры

Вычитание кортежа интервалов из даты

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 │
└───────────────────────────────────────────────────────────────────────┘

subtractWeeks

Добавленный в: v1.1.0

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

Синтаксис

subtractWeeks(datetime, num)

Аргументы

  • datetime — дата или дата и время, из которых нужно вычесть указанное количество недель. Date или Date32 или DateTime или DateTime64 или String
  • num — количество недель, которое нужно вычесть. (U)Int* или Float*

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

Возвращает datetime минус num недель. Date или Date32 или DateTime или DateTime64

Примеры

Вычитание недель из значений разных типов даты

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 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 week)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalWeek(10))─┐
│                                            1998-04-07 │
└───────────────────────────────────────────────────────┘

subtractYears

Добавленный в: v1.1.0

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

Синтаксис

subtractYears(datetime, num)

Аргументы

  • datetime — дата или дата и время, из которых нужно вычесть указанное количество лет. Date или Date32 или DateTime или DateTime64 или String
  • num — количество лет, которое нужно вычесть. (U)Int* или Float*

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

Возвращает datetime за вычетом num лет. Date или Date32 или DateTime или DateTime64

Примеры

Вычитание лет из разных типов дат

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 │
└──────────────────────────┴───────────────────────────────┴──────────────────────────────────────┘

Использование альтернативного синтаксиса INTERVAL

SELECT dateSub('1998-06-16'::Date, INTERVAL 10 year)
┌─minus(CAST('1998-06-16', 'Date'), toIntervalYear(10))─┐
│                                            1988-06-16 │
└───────────────────────────────────────────────────────┘

timeDiff

Добавленный в: v23.4.0

Возвращает разницу между двумя датами или значениями даты и времени в секундах. Разница вычисляется как enddate - startdate.

Эта функция эквивалентна dateDiff('second', startdate, enddate).

Чтобы вычислить разницу во времени в других единицах (часах, днях, месяцах и т. д.), используйте функцию dateDiff.

Синтаксис

timeDiff(startdate, enddate)

Аргументы

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

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

Возвращает разницу между enddate и startdate, выраженную в секундах. Int64

Примеры

Вычисление разницы во времени в секундах

SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) AS res
┌───res─┐
│ 90000 │
└───────┘

Рассчитать разницу во времени и перевести в часы

SELECT timeDiff(toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')) / 3600 AS hours
┌─hours─┐
│    25 │
└───────┘

Эквивалентно dateDiff в секундах

SELECT
    timeDiff(toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS time_diff_result,
    dateDiff('second', toDateTime('2021-12-29'), toDateTime('2022-01-01')) AS date_diff_result
┌─time_diff_result─┬─date_diff_result─┐
│           259200 │           259200 │
└──────────────────┴──────────────────┘

timeSlot

Добавленный в: v1.1.0

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

Синтаксис

timeSlot(time[, time_zone])

Аргументы

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

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

Возвращает время, округлённое до начала получасового интервала. 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 │
└────────────────────────────────────────────────────┘

timeSlots

Добавленный в: v1.1.0

Для интервала времени, начинающегося в StartTime и длящегося Duration секунд, возвращает массив моментов времени, состоящий из точек этого интервала, округлённых вниз с шагом Size секунд. Size — необязательный параметр, по умолчанию равный 1800 (30 минутам).

Это необходимо, например, при поиске просмотров страниц в соответствующем сеансе.

Для DateTime64 масштаб возвращаемого значения может отличаться от масштаба StartTime. Используется наибольший масштаб среди всех переданных аргументов.

Синтаксис

timeSlots(StartTime, Duration[, Size])

Аргументы

  • StartTime — Время начала интервала. DateTime или DateTime64
  • Duration — Длительность интервала в секундах. UInt32 или DateTime64
  • Size — Необязательно. Размер временных слотов в секундах. По умолчанию — 1800 (30 минут). UInt32 или DateTime64

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

Возвращает массив значений DateTime/DateTime64 (тип возвращаемого значения соответствует типу StartTime). Для DateTime64 масштаб возвращаемого значения может отличаться от масштаба StartTime — берется наибольший масштаб среди всех переданных аргументов. Array(DateTime) или Array(DateTime64)

Примеры

Генерация временных слотов для интервала

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']                        │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘

временная метка

Добавленный в: v23.9.0

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

Синтаксис

timestamp(expr[, expr_time])

Аргументы

  • expr — Дата или дата и время. String
  • expr_time — Необязательно. Время, которое будет добавлено к преобразованному значению. String

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

Возвращает преобразованное значение expr или expr с добавленным временем в формате DateTime64(6)

Примеры

Преобразование строки даты в DateTime64(6)

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

Добавленный в: v21.4.0

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

Синтаксис

timezone()

Псевдонимы: timeZone

Аргументы

  • Нет.

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

Возвращает каноническое имя часового пояса в виде String

Примеры

Пример использования

SELECT timezone()
┌─timezone()───────┐
│ Europe/Amsterdam │
└──────────────────┘

timezoneOf

Добавленный в: v21.4.0

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

Синтаксис

timezoneOf(datetime)

Псевдонимы: timeZoneOf

Аргументы

  • datetime — Значение типа DateTime или DateTime64
  • timezone — Необязательно. Имя часового пояса, в который нужно преобразовать значение datetime. String

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

Возвращает имя часового пояса для datetime. String

Примеры

Пример использования

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

timezoneOffset

Добавленный в: v21.6.0

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

Синтаксис

timezoneOffset(datetime)

Псевдонимы: timeZoneOffset

Аргументы

  • datetime — значение DateTime, для которого требуется получить смещение часового пояса. DateTime или DateTime64

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

Возвращает смещение относительно 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 │
└─────────────────────┴──────────────────────────────┴───────────────────┴─────────────────┘

toDayOfMonth

Добавленный в: v1.1.0

Возвращает день месяца (1–31) из значения типа Date или DateTime.

Синтаксис

toDayOfMonth(datetime)

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

Аргументы

  • datetime — Дата или дата и время, из которых извлекается день месяца. Date или Date32 или DateTime или DateTime64

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

Возвращает день месяца для указанной даты/времени UInt8

Примеры

Пример использования

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

toDayOfWeek

Добавленный в: v1.1.0

Возвращает номер дня недели для значения Date или DateTime.

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

Режим Первый день недели Диапазон
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(datetime[, mode[, timezone]])

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

Аргументы

  • datetime — Дата или дата и время, для которых нужно определить день недели. Date или Date32 или DateTime или DateTime64
  • mode — Необязательный параметр. Целое число, задающее режим недели (0-3). Если не указан, по умолчанию используется 0. UInt8
  • timezone — Необязательный параметр. Часовой пояс, используемый для преобразования. String

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

Возвращает день недели для указанного Date или DateTime. UInt8

Примеры

Пример использования

-- Следующая дата — 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 │
└───────────────────────────────────────┴──────────────────────────────────────────┘

toDayOfYear

Добавленный в: v18.4.0

Возвращает номер дня в году (1–366) для значения типа Date или DateTime.

Синтаксис

toDayOfYear(datetime)

Псевдонимы: DAYOFYEAR

Аргументы

  • datetime — дата или дата и время, из которых нужно получить день года. Date или Date32 или DateTime или DateTime64

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

Возвращает день года для указанного значения Date или DateTime UInt16

Примеры

Пример использования

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

toDaysInMonth

Добавленный в: v26.3.0

Возвращает количество дней в месяце для значения типа Date или DateTime.

Возвращаемое значение находится в диапазоне от 28 до 31.

Синтаксис

toDaysInMonth(datetime)

Аргументы

  • datetime — Дата или дата и время, для которых нужно получить количество дней в месяце. Date или Date32 или DateTime или DateTime64

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

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

Примеры

Пример использования

SELECT toDaysInMonth(toDate('2023-02-01')), toDaysInMonth(toDate('2024-02-01')), toDaysInMonth(toDate('2023-01-01'))
┌─toDaysInMonth(toDate('2023-02-01'))─┬─toDaysInMonth(toDate('2024-02-01'))─┬─toDaysInMonth(toDate('2023-01-01'))─┐
│                                  28 │                                  29 │                                  31 │
└─────────────────────────────────────┴─────────────────────────────────────┴─────────────────────────────────────┘

toDaysSinceYearZero

Добавленный в: v23.9.0

Для указанной даты возвращает количество дней, прошедших с 1 января 0000 по пролептическому григорианскому календарю, определённому стандартом ISO 8601.

Вычисление выполняется так же, как в функции MySQL TO_DAYS.

Синтаксис

toDaysSinceYearZero(date[, time_zone])

Псевдонимы: TO_DAYS

Аргументы

  • date — Дата или дата и время, для которых вычисляется количество дней с начала нулевого года. Date или Date32 или DateTime или DateTime64
  • time_zone — Часовой пояс. String

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

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

Примеры

Вычислить количество дней с начала нулевого года

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

toHour

Добавленный в: v1.1.0

Возвращает часовой компонент (0–23) значения DateTime или DateTime64.

Синтаксис

toHour(datetime)

Псевдонимы: HOUR

Аргументы

  • datetime — дата и время, из которых нужно получить час. DateTime или DateTime64

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

Возвращает час (0–23) для datetime. UInt8

Примеры

Пример использования

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

toISOWeek

Добавленный в: v20.1.0

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

Это функция совместимости, эквивалентная toWeek(date, 3). Недели ISO начинаются в понедельник, а первая неделя года включает 4 января. Согласно ISO 8601, номера недель находятся в диапазоне от 1 до 53.

Обратите внимание, что для дат вблизи начала или конца года может возвращаться номер недели предыдущего или следующего года. Например, 29 декабря 2025 года возвращает неделю 1, поскольку эта дата попадает в первую неделю, включающую 4 января 2026 года.

Синтаксис

toISOWeek(datetime[, timezone])

Аргументы

  • datetime — Дата или дата и время, для которых нужно получить номер недели по ISO. Date или DateTime или Date32 или DateTime64
  • timezone — Необязательно. Часовой пояс. String

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

Возвращает номер недели по ISO в соответствии со стандартом ISO 8601. Возвращает число от 1 до 53. UInt8

Примеры

Получение номеров недель по ISO

SELECT toDate('2016-12-27') AS date, toISOWeek(date) AS isoWeek
┌───────date─┬─isoWeek─┐
│ 2016-12-27 │      52 │
└────────────┴─────────┘

ISO-неделя может относиться к другому году

SELECT toDate('2025-12-29') AS date, toISOWeek(date) AS isoWeek, toYear(date) AS year
┌───────date─┬─isoWeek─┬─year─┐
│ 2025-12-29 │       1 │ 2025 │
└────────────┴─────────┴──────┘

toISOYear

Добавленный в: v18.4.0

Преобразует дату или дату и время в номер года по ISO.

Синтаксис

toISOYear(datetime)

Аргументы

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

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

Примеры

Получение года по ISO из значений даты

SELECT
toISOYear(toDate('2024/10/02')) as year1,
toISOYear(toDateTime('2024-10-02 01:30:00')) as year2
┌─year1─┬─year2─┐
│  2024 │  2024 │
└───────┴───────┘

toLastDayOfMonth

Добавленный в: v1.1.0

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

Синтаксис

toLastDayOfMonth(value)

Псевдонимы: LAST_DAY

Аргументы

  • value — дата или дата и время, которые нужно округлить вверх до последнего дня месяца. Date или Date32 или DateTime или DateTime64

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

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

Примеры

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

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

toLastDayOfWeek

Добавленный в: v23.5.0

Округляет дату или дату и время до ближайшей субботы или воскресенья в большую сторону.

Синтаксис

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

Аргументы

  • datetime — Дата или дата и время для преобразования. Date или DateTime или Date32 или DateTime64
  • mode — Определяет первый день недели, как описано в функции toWeek(). По умолчанию — 0. UInt8
  • timezone — Необязательно. Часовой пояс, используемый для преобразования. Если не указан, используется часовой пояс сервера. String

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

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

Примеры

Округление вверх до ближайшей субботы или воскресенья

SELECT
    toLastDayOfWeek(toDateTime('2023-04-21 10:20:30')), /* a Friday */
    toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* a Friday */
    toLastDayOfWeek(toDate('2023-04-23')), /* a Sunday */
    toLastDayOfWeek(toDate('2023-04-23'), 1) /* a Sunday */
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-23')):                 2023-04-29
toLastDayOfWeek(toDate('2023-04-23'), 1):              2023-04-23

toMicrosecond

Добавленный в: v25.7.0

Возвращает микросекунды (0–999999) значения DateTime64.

Синтаксис

toMicrosecond(datetime)

Псевдонимы: MICROSECOND

Аргументы

  • datetime — дата и время, из которых извлекается микросекунда. DateTime64

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

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

Примеры

Пример использования

SELECT toMicrosecond(toDateTime64('2023-04-21 10:20:30.456789', 6));
┌─toMicrosecond(toDateTime64('2023-04-21 10:20:30.456789', 6))─┐
│                                                       456789 │
└──────────────────────────────────────────────────────────────┘

toMillisecond

Добавленный в: v24.2.0

Возвращает миллисекундную составляющую (0–999) значения DateTime или DateTime64.

Синтаксис

toMillisecond(datetime)

Псевдонимы: MILLISECOND

Аргументы

  • datetime — дата и время, из которых извлекается миллисекунда. DateTime или DateTime64

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

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

Примеры

Пример использования

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

toMinute

Добавленный в: v1.1.0

Возвращает значение минут (0–59) для Date или DateTime.

Синтаксис

toMinute(datetime)

Псевдонимы: MINUTE

Аргументы

  • datetime — дата и время, из которых нужно получить минуты. DateTime или DateTime64

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

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

Примеры

Пример использования

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

toModifiedJulianDay

Добавленный в: v21.1.0

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

Синтаксис

toModifiedJulianDay(date)

Аргументы

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

Возвращает число модифицированного юлианского дня. Int32

Примеры

Преобразование даты в модифицированный юлианский день

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

toModifiedJulianDayOrNull

Добавленный в: v21.1.0

Аналогично toModifiedJulianDay(), но вместо генерации исключений возвращает NULL.

Синтаксис

toModifiedJulianDayOrNull(date)

Аргументы

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

Возвращает номер модифицированного юлианского дня для корректного значения date, в противном случае — null. Nullable(Int32)

Примеры

Преобразование даты в модифицированный юлианский день с обработкой null

SELECT toModifiedJulianDayOrNull('2020-01-01');
SELECT toModifiedJulianDayOrNull('0000-00-00'); -- invalid date, returns NULL
┌─toModifiedJulianDayOrNull('2020-01-01')─┐
│                                   58849 │
└─────────────────────────────────────────┘
┌─toModifiedJulianDayOrNull('0000-00-00')─┐
│                                    ᴺᵁᴸᴸ │
└─────────────────────────────────────────┘

toMonday

Добавленный в: v1.1.0

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

Синтаксис

toMonday(value)

Аргументы

  • value — дата или дата и время, которые нужно округлить вниз до понедельника соответствующей недели. Date или Date32 или DateTime или DateTime64

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

Возвращает дату понедельника той же недели для указанной даты или даты и времени. Date

Примеры

Округлить вниз до понедельника недели

SELECT
toMonday(toDateTime('2023-04-21 10:20:30')), -- A Friday
toMonday(toDate('2023-04-24'));              -- Already a Monday
┌─toMonday(toDateTime('2023-04-21 10:20:30'))─┬─toMonday(toDate('2023-04-24'))─┐
│                                  2023-04-17 │                     2023-04-24 │
└─────────────────────────────────────────────┴────────────────────────────────┘

toMonth

Добавленный в: v1.1.0

Возвращает номер месяца (1–12) из значения Date или DateTime.

Синтаксис

toMonth(datetime)

Псевдонимы: MONTH

Аргументы

  • datetime — Дата или дата и время, из которых нужно получить месяц. Date или Date32 или DateTime или DateTime64

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

Возвращает месяц для указанной даты или даты и времени UInt8

Примеры

Пример использования

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

toMonthNumSinceEpoch

Добавленный в: v25.3.0

Возвращает количество месяцев, прошедших с начала 1970 года

Синтаксис

toMonthNumSinceEpoch(date)

Аргументы

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

Положительное целое число

Примеры

Пример

SELECT toMonthNumSinceEpoch(toDate('2024-10-01'))
657

toNanosecond

Добавленный в: v25.7.0

Возвращает наносекундную составляющую (0-999999999) значения DateTime64.

Синтаксис

toNanosecond(datetime)

Псевдонимы: NANOSECOND

Аргументы

  • datetime — дата и время, из которых извлекается наносекунда. DateTime64

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

Возвращает значение наносекундной части секунды (0 - 999999999) для datetime. UInt32

Примеры

Пример использования

SELECT toNanosecond(toDateTime64('2023-04-21 10:20:30.123456789', 9));
┌─toNanosecond(toDateTime64('2023-04-21 10:20:30.123456789', 9))─┐
│                                                      123456789 │
└────────────────────────────────────────────────────────────────┘

toQuarter

Добавленный в: v1.1.0

Возвращает номер квартала года (1–4) для указанного значения Date или DateTime.

Синтаксис

toQuarter(datetime)

Псевдонимы: QUARTER

Аргументы

  • datetime — дата или дата и время, для которых нужно получить квартал года. Date или Date32 или DateTime или DateTime64

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

Возвращает квартал года для указанной даты/времени UInt8

Примеры

Пример использования

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

toRelativeDayNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество дней, прошедших с некоторой фиксированной точки в прошлом. Точный момент времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычислять разницу в днях между двумя датами или датой и временем, например, toRelativeDayNum(dt1) - toRelativeDayNum(dt2).

Синтаксис

toRelativeDayNum(date)

Аргументы

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

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

Примеры

Вычисление относительных номеров дней

SELECT toRelativeDayNum(toDate('2023-04-01')) - toRelativeDayNum(toDate('2023-01-01'))
┌─minus(toRelativeDayNum(toDate('2023-04-01')), toRelativeDayNum(toDate('2023-01-01')))─┐
│                                                                                    90 │
└───────────────────────────────────────────────────────────────────────────────────────┘

toRelativeHourNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество часов, прошедших с некоторого фиксированного момента в прошлом. Точный момент времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычисление разницы в часах между двумя датами или датами и временем, например, toRelativeHourNum(dt1) - toRelativeHourNum(dt2).

Синтаксис

toRelativeHourNum(date)

Аргументы

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

Возвращает число часов с фиксированной точки отсчета в прошлом. UInt32

Примеры

Получить относительные номера часов

SELECT toRelativeHourNum(toDateTime('2023-01-01 12:00:00')) - toRelativeHourNum(toDateTime('2023-01-01 00:00:00')) AS hours_difference
┌─hours_difference─┐
│               12 │
└──────────────────┘

toRelativeMinuteNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество минут, прошедших с некоторого фиксированного момента в прошлом. Точный момент времени является деталью реализации, поэтому эту функцию не следует использовать автономно. Основное назначение функции — вычисление разницы в минутах между двумя датами или датами и временем, например, toRelativeMinuteNum(dt1) - toRelativeMinuteNum(dt2).

Синтаксис

toRelativeMinuteNum(date)

Аргументы

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

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

Примеры

Получение относительных номеров минут

SELECT toRelativeMinuteNum(toDateTime('2023-01-01 00:30:00')) - toRelativeMinuteNum(toDateTime('2023-01-01 00:00:00')) AS minutes_difference
┌─minutes_difference─┐
│                 30 │
└────────────────────┘

toRelativeMonthNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в число месяцев, прошедших с некоторой фиксированной точки в прошлом. Точная точка во времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычисление разницы в месяцах между двумя датами или значениями типа «дата и время», например, toRelativeMonthNum(dt1) - toRelativeMonthNum(dt2).

Синтаксис

toRelativeMonthNum(date)

Аргументы

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

Возвращает количество месяцев от фиксированной точки отсчёта в прошлом. UInt32

Примеры

Получение относительных номеров месяцев

SELECT toRelativeMonthNum(toDate('2023-04-01')) - toRelativeMonthNum(toDate('2023-01-01')) AS months_difference
┌─months_difference─┐
│                 3 │
└───────────────────┘

toRelativeQuarterNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество кварталов, прошедших с некоторого фиксированного момента в прошлом. Точный момент времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычисление разницы в кварталах между двумя датами или датами и временем, например, toRelativeQuarterNum(dt1) - toRelativeQuarterNum(dt2).

Синтаксис

toRelativeQuarterNum(date)

Аргументы

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

Возвращает количество кварталов, прошедших с фиксированной точки отсчёта в прошлом. UInt32

Примеры

Получение относительных номеров кварталов

SELECT toRelativeQuarterNum(toDate('2023-04-01')) - toRelativeQuarterNum(toDate('2023-01-01')) AS quarters_difference
┌─quarters_difference─┐
│                   1 │
└─────────────────────┘

toRelativeSecondNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество секунд, прошедших с некоторой фиксированной точки в прошлом. Точная точка во времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычислять разницу в секундах между двумя датами или значениями даты и времени, например, toRelativeSecondNum(dt1) - toRelativeSecondNum(dt2).

Синтаксис

toRelativeSecondNum(date)

Аргументы

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

Возвращает число секунд от фиксированной точки отсчёта в прошлом. UInt32

Примеры

Получение относительных номеров секунд

SELECT toRelativeSecondNum(toDateTime('2023-01-01 00:01:00')) - toRelativeSecondNum(toDateTime('2023-01-01 00:00:00')) AS seconds_difference
┌─seconds_difference─┐
│                 60 │
└────────────────────┘

toRelativeWeekNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество недель, прошедших с некоторого фиксированного момента в прошлом. Точный момент времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычисление разницы в неделях между двумя датами или значениями даты и времени, например, toRelativeWeekNum(dt1) - toRelativeWeekNum(dt2).

Синтаксис

toRelativeWeekNum(date)

Аргументы

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

Возвращает количество недель, прошедших с фиксированной точки отсчета в прошлом. UInt32

Примеры

Получение относительных номеров недель

SELECT toRelativeWeekNum(toDate('2023-01-08')) - toRelativeWeekNum(toDate('2023-01-01')) AS weeks_difference
┌─weeks_difference─┐
│                1 │
└──────────────────┘

toRelativeYearNum

Добавленный в: v1.1.0

Преобразует дату или дату и время в количество лет, прошедших с некоторой фиксированной точки в прошлом. Точный момент времени является деталью реализации, поэтому эту функцию не предполагается использовать автономно. Основное назначение функции — вычисление разницы в годах между двумя датами или значениями типа дата и время, например, toRelativeYearNum(dt1) - toRelativeYearNum(dt2).

Синтаксис

toRelativeYearNum(date)

Аргументы

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

Возвращает количество лет от фиксированной точки отсчета в прошлом. UInt16

Примеры

Получение относительного номера года

SELECT toRelativeYearNum('2010-10-01'::DateTime) - toRelativeYearNum('2000-01-01'::DateTime)
┌─minus(toRelativeYearNum(CAST('2010-10-01', 'DateTime')), toRelativeYearNum(CAST('2000-01-01', 'DateTime')))─┐
│                                                                                                          10 │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

toSecond

Добавленный в: v1.1.0

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

Синтаксис

toSecond(datetime)

Псевдонимы: SECOND

Аргументы

  • datetime — дата и время, из которых нужно получить секунду. DateTime или DateTime64

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

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

Примеры

Пример использования

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

toStartOfDay

Добавленный в: v1.1.0

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

Синтаксис

toStartOfDay(datetime)

Аргументы

  • datetime — Дата или дата и время, которые нужно округлить. Date или DateTime

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

Возвращает дату и время, округлённые вниз до начала дня. DateTime или DateTime64

Примеры

Округление вниз до начала дня

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

toStartOfFifteenMinutes

Добавленный в: v1.1.0

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

Синтаксис

toStartOfFifteenMinutes(datetime)

Аргументы

  • datetime — Дата или дата и время, которое нужно округлить. DateTime или DateTime64

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

Возвращает дату и время, округлённые до начала ближайшего пятнадцатиминутного интервала. DateTime или DateTime64

Примеры

Пример

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

toStartOfFiveMinutes

Добавленный в: v22.6.0

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

Синтаксис

toStartOfFiveMinutes(datetime)

Псевдонимы: toStartOfFiveMinute

Аргументы

  • datetime — дата и время, которые нужно округлить. DateTime или DateTime64

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

Возвращает дату и время, округлённые к началу ближайшего пятиминутного интервала. DateTime или DateTime64

Примеры

Пример

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

toStartOfHour

Добавленный в: v1.1.0

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

Синтаксис

toStartOfHour(datetime)

Аргументы

  • datetime — Дата и время, которое нужно округлить. DateTime или DateTime64

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

Возвращает дату и время, округлённые вниз до начала часа. DateTime или DateTime64

Примеры

Округление до начала часа

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

toStartOfISOYear

Добавленный в: v1.1.0

Округляет дату или дату и время вниз до первого дня ISO-года, который может не совпадать с обычным календарным годом. См. дату недели по ISO.

Синтаксис

toStartOfISOYear(value)

Аргументы

  • value — дата или дата и время, которые нужно округлить вниз до первого дня года по ISO. Date или Date32 или DateTime или DateTime64

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

Возвращает первый день года по ISO для указанной даты или даты и времени. Date

Примеры

Округлить вниз до первого дня года по ISO

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

toStartOfInterval

Добавленный в: v20.1.0

Эта функция обобщает остальные функции 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).

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

Interval Start
YEAR год 0
QUARTER 1900 Q1
MONTH январь 1900
WEEK 1970, 1-я неделя (01-05)
DAY 1970-01-01
HOUR (*)
MINUTE 1970-01-01 00:00:00
SECOND 1970-01-01 00:00:00
MILLISECOND 1970-01-01 00:00:00
MICROSECOND 1970-01-01 00:00:00
NANOSECOND 1970-01-01 00:00:00
(*) интервалы в часах — особый случай: вычисление всегда выполняется относительно 00:00:00 (полуночи) текущего дня. Поэтому имеют смысл только
значения часов от 1 до 23.

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

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

Синтаксис

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

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

Аргументы

  • value — Значение типа дата или дата и время, которое нужно округлить вниз. Date или DateTime или DateTime64
  • x — Число, задающее длину интервала. - unit — Единица интервала: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND, MILLISECOND, MICROSECOND, NANOSECOND. - time_zone — Необязательно. Имя часового пояса в виде строки. - origin — Необязательно. Точка отсчёта для вычисления (только для второй перегрузки).

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

Возвращает начало интервала, в который попадает входное значение. DateTime

Примеры

Базовое округление по интервалу

SELECT toStartOfInterval(toDateTime('2023-01-15 14:30:00'), INTERVAL 1 MONTH)
┌─toStartOfInterval(toDateTime('2023-01-15 14:30:00'), toIntervalMonth(1))─┐
│                                                               2023-01-01 │
└──────────────────────────────────────────────────────────────────────────┘

Использование начальной точки

SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'))
┌─toStartOfInterval(toDateTime('2023-01-01 14:45:00'), toIntervalMinute(1), toDateTime('2023-01-01 14:35:30'))─┐
│                                                                                          2023-01-01 14:44:30 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

toStartOfMicrosecond

Добавленный в: v22.6.0

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

Синтаксис

toStartOfMicrosecond(datetime[, timezone])

Аргументы

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

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

Входное значение с субмикросекундами 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 13:20:30.999999000 │
└─────────────────────────────────────────────┘

toStartOfMillisecond

Добавленный в: v22.6.0

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

Синтаксис

toStartOfMillisecond(datetime[, timezone])

Аргументы

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

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

Входное значение с долями миллисекунды. 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 13:20:30.999000000 │
└─────────────────────────────────────────────┘

toStartOfMinute

Добавленный в: v1.1.0

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

Синтаксис

toStartOfMinute(datetime)

Аргументы

  • datetime — дата и время, которое нужно округлить. DateTime или DateTime64

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

Возвращает дату и время, округлённые до начала минуты. DateTime или DateTime64

Примеры

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

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

toStartOfMonth

Добавленный в: v1.1.0

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

Синтаксис

toStartOfMonth(value)

Аргументы

  • value — дата или дата и время, которые нужно округлить до первого дня месяца. Date или Date32 или DateTime или DateTime64

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

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

Примеры

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

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

toStartOfNanosecond

Добавленный в: v22.6.0

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

Синтаксис

toStartOfNanosecond(datetime[, timezone])

Аргументы

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

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

Входное значение с наносекундами. 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 13:20:30.999999999 │
└────────────────────────────────────────────┘

toStartOfQuarter

Добавленный в: v1.1.0

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

Синтаксис

toStartOfQuarter(value)

Аргументы

  • value — Дата или дата и время, которое нужно округлить вниз до первого дня квартала. Date или Date32 или DateTime или DateTime64

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

Возвращает первый день квартала для указанной даты или даты и времени. Date

Примеры

Округление вниз до первого дня квартала

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

toStartOfSecond

Добавленный в: v20.5.0

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

Синтаксис

toStartOfSecond(datetime[, timezone])

Аргументы

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

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

Возвращает входное значение без долей секунды. 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 │
└────────────────────────────────────────┘

toStartOfTenMinutes

Добавленный в: v20.1.0

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

Синтаксис

toStartOfTenMinutes(datetime)

Аргументы

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

Возвращает дату и время, округлённые до начала ближайшего десятиминутного интервала. DateTime или DateTime64

Примеры

Пример

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

toStartOfWeek

Добавленный в: v20.1.0

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

Синтаксис

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

Аргументы

  • datetime — дата или дата и время для преобразования. Date или DateTime или Date32 или DateTime64
  • mode — определяет первый день недели, как описано для функции toWeek(). Значение по умолчанию — 0. UInt8
  • timezone — часовой пояс, используемый для преобразования. Если не указан, используется часовой пояс сервера. String

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

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

Примеры

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

SELECT
        toStartOfWeek(toDateTime('2023-04-21 10:20:30')), /* a Friday */
        toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1), /* a Friday */
        toStartOfWeek(toDate('2023-04-24')), /* a Monday */
        toStartOfWeek(toDate('2023-04-24'), 1) /* a Monday */
    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

toStartOfYear

Добавленный в: v1.1.0

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

Синтаксис

toStartOfYear(value)

Аргументы

  • value — Дата или дата и время для округления вниз. Date или Date32 или DateTime или DateTime64

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

Возвращает первый день года для заданной даты/времени Date

Примеры

Округление вниз до первого дня года

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

toTimeWithFixedDate

Добавленный в: v25.5.0

Извлекает компонент времени из значения даты и времени. Возвращаемый результат представляет собой смещение относительно фиксированного момента времени, в настоящее время 1970-01-02, однако точный момент времени является деталью реализации и в будущем может измениться.

Поэтому toTimeWithFixedDate не следует использовать отдельно. Основное назначение функции — вычислять разность во времени между двумя значениями даты и времени, например toTimeWithFixedDate(dt1) - toTimeWithFixedDate(dt2).

Это устаревшая функция toTime, переименованная в v25.5, поскольку имя toTime теперь используется toTime, которая преобразует значения в тип данных Time. Она по-прежнему доступна под прежним именем toTime, если включена настройка use_legacy_to_time (начиная с v26.7 по умолчанию установлено значение 0, а с v25.6 по v26.6 по умолчанию было установлено значение 1).

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

Синтаксис

toTimeWithFixedDate(datetime[, timezone])

Аргументы

  • datetime — Дата и время, из которых извлекается время. DateTime или DateTime64
  • timezone — Необязательно. Часовой пояс возвращаемого значения. String

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

Возвращает компонент времени даты и времени в виде смещения относительно фиксированного момента времени (в настоящее время — 1970-01-02). DateTime

Примеры

Вычисление разницы во времени между двумя датами

SELECT toTimeWithFixedDate('2025-06-15 12:00:00'::DateTime) - toTimeWithFixedDate('2024-05-10 11:00:00'::DateTime) AS result, toTypeName(result)
┌─result─┬─toTypeName(result)─┐
│   3600 │ Int32              │
└────────┴────────────────────┘

Доли секунды отбрасываются

SELECT toTimeWithFixedDate(toDateTime64('1970-12-10 01:20:30.3000', 3)) AS result, toTypeName(result)
┌──────────────result─┬─toTypeName(result)─┐
│ 1970-01-02 01:20:30 │ DateTime           │
└─────────────────────┴────────────────────┘

Та же функция, вызываемая под прежним именем legacy

SET use_legacy_to_time = 1;
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           │
└─────────────────────┴────────────────────┘

toTimezone

Добавленный в: v1.1.0

Преобразует DateTime или DateTime64 в указанный часовой пояс. Внутреннее значение (число unix-секунд) данных не изменяется. Изменяются только атрибут часового пояса значения и его строковое представление.

Синтаксис

toTimezone(datetime, timezone)

Псевдонимы: toTimeZone

Аргументы

  • date — Значение для преобразования. DateTime или DateTime64
  • timezone — Имя целевого часового пояса. String

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

Возвращает ту же временную метку, что и входное значение, но с указанным часовым поясом. DateTime или DateTime64

Примеры

Пример использования

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;
Строка 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

toUTCTimestamp

Добавленный в: v23.8.0

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

Синтаксис

toUTCTimestamp(datetime, time_zone)

Псевдонимы: to_utc_timestamp

Аргументы

  • datetime — Константное значение типа «дата или дата и время» либо выражение. DateTime или DateTime64
  • time_zone — Константное значение строкового типа либо выражение, задающее часовой пояс. String

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

Возвращает дату или дату и время в часовом поясе UTC. DateTime или DateTime64

Примеры

Преобразование в UTC

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

toUnixTimestamp

Добавленный в: v1.1.0

Преобразует String, Date или DateTime в Unix-временную метку (UInt32; количество секунд с 1970-01-01 00:00:00 UTC).

Синтаксис

toUnixTimestamp(date[, timezone])

Аргументы

  • date — Значение для преобразования. Date или Date32 или DateTime или DateTime64 или String
  • timezone — Необязательно. Часовой пояс для преобразования. Если не указан, используется часовой пояс сервера. String

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

Возвращает Unix-временную метку. 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;
строка 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

toWeek

Добавленный в: v20.1.0

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

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

В следующей таблице описано, как работает аргумент mode.

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 января

Для значений mode со смыслом "как минимум с 4 днями в этом году" недели нумеруются в соответствии с ISO 8601:1988:

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

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

Первый аргумент также можно указать как String в формате, поддерживаемом parseDateTime64BestEffort. Поддержка строковых аргументов существует только из соображений совместимости с MySQL, которая требуется некоторым сторонним инструментам. Поскольку в будущем поддержка строковых аргументов может зависеть от новых настроек совместимости с MySQL, а разбор строк в целом работает медленно, рекомендуется её не использовать.

Синтаксис

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

Псевдонимы: week

Аргументы

  • datetime — Дата или дата и время, для которых нужно получить номер недели. Date или DateTime
  • mode — Необязательно. Режим от 0 до 9 определяет первый день недели и диапазон номеров недель. По умолчанию 0. - time_zone — Необязательно. Часовой пояс. String

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

Возвращает номер недели в соответствии с указанным режимом. UInt32

Примеры

Получение номеров недель в разных режимах

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 │
└────────────┴───────┴───────┴───────┘

toYYYYMM

Добавленный в: v1.1.0

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

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

Синтаксис

toYYYYMM(datetime[, timezone])

Аргументы

  • datetime — дата или дата и время для преобразования. Date или Date32 или DateTime или DateTime64
  • timezone — необязательно. Часовой пояс для преобразования. Если указан, часовой пояс должен быть строковой константой. String

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

Возвращает число типа UInt32, содержащее год и номер месяца (YYYY * 100 + MM). UInt32

Примеры

Преобразование текущей даты в формат YYYYMM

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

toYYYYMMDD

Добавленный в: v1.1.0

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

Синтаксис

toYYYYMMDD(datetime[, timezone])

Аргументы

  • datetime — Дата или дата и время для преобразования. Date или Date32 или DateTime или DateTime64
  • timezone — Необязательно. Часовой пояс, используемый при преобразовании. Если указан, часовой пояс должен быть строковой константой. String

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

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

Примеры

Преобразование даты в формат YYYYMMDD в другом часовом поясе

SELECT toYYYYMMDD(toDateTime('2026-01-02 03:04:05', 'UTC'), 'US/Eastern')
┌─toYYYYMMDD(toDateTime('2026-01-02 03:04:05', 'UTC'), 'US/Eastern')─┐
│                                                           20260101 │
└────────────────────────────────────────────────────────────────────┘

toYYYYMMDDhhmmss

Добавленный в: v1.1.0

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

Синтаксис

toYYYYMMDDhhmmss(datetime[, timezone])

Аргументы

  • datetime — Дата или дата и время для преобразования. Date или Date32 или DateTime или DateTime64
  • timezone — Необязательно. Часовой пояс для преобразования. Если указан, часовой пояс должен быть строковой константой. String

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

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

Примеры

Преобразование даты и времени в формат YYYYMMDDhhmmss

SELECT toYYYYMMDDhhmmss(toDateTime('2023-03-02 16:22:09', 'UTC'), 'US/Eastern')
┌─toYYYYMMDDhhmmss(toDateTime('2023-03-02 16:22:09', 'UTC'), 'US/Eastern')─┐
│                                                           20230302112209 │
└──────────────────────────────────────────────────────────────────────────┘

toYear

Добавленный в: v1.1.0

Возвращает компонент года (н. э.) из значения Date или DateTime.

Синтаксис

toYear(datetime)

Псевдонимы: YEAR

Аргументы

  • datetime — дата или дата и время, из которых нужно получить год. Date или Date32 или DateTime или DateTime64

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

Возвращает год из указанного значения Date или DateTime UInt16

Примеры

Пример использования

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

toYearNumSinceEpoch

Добавленный в: v25.3.0

Возвращает количество лет, прошедших с 1970 года

Синтаксис

toYearNumSinceEpoch(date)

Аргументы

  • date — Дата или дата и время, которые нужно преобразовать. Date или DateTime или DateTime64

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

Положительное целое число

Примеры

Пример

SELECT toYearNumSinceEpoch(toDate('2024-10-01'))
54

toYearWeek

Добавленный в: v20.1.0

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

Аргумент mode работает так же, как аргумент mode в toWeek().

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

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

Синтаксис

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

Псевдонимы: yearweek

Аргументы

  • datetime — дата или дата и время, для которых нужно получить год и номер недели. Date или DateTime
  • mode — необязательно. Режим от 0 до 9 задаёт первый день недели и диапазон номеров недель. По умолчанию 0. - timezone — необязательно. Часовой пояс. String

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

Возвращает год и номер недели в виде одного целочисленного значения. UInt32

Примеры

Получение комбинаций год-неделя для разных режимов

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 │
└────────────┴───────────┴───────────┴───────────┴───────────────┘

today

Добавленный в: v1.1.0

Возвращает текущую дату на момент анализа запроса. То же, что и toDate(now()).

Синтаксис

today()

Псевдонимы: current_date, curdate

Аргументы

  • Отсутствуют.

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

Возвращает текущую дату Date

Примеры

Пример использования

SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty
┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃      today ┃    curdate ┃ current_date ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ 2026-08-02 │ 2026-08-02 │   2026-08-02 │
└────────────┴────────────┴──────────────┘

Синтаксис SQL без скобок по стандарту

SELECT TODAY, CURDATE,CURRENT_DATE
┌──────TODAY─┬────CURDATE─┬─CURRENT_DATE─┐
│ 2026-08-02 │ 2026-08-02 │   2026-08-02 │
└────────────┴────────────┴──────────────┘

yesterday

Добавленный в: v1.1.0

Не принимает аргументов и возвращает вчерашнюю дату на одном из этапов анализа запроса.

Синтаксис

yesterday()

Аргументы

  • Отсутствуют.

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

Возвращает вчерашнюю дату. Date

Примеры

Получение вчерашней даты

SELECT yesterday();
SELECT today() - 1;
┌─yesterday()─┐
│  2026-08-01 │
└─────────────┘
┌─minus(today(), 1)─┐
│        2026-08-01 │
└───────────────────┘
Navigation