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

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

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

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

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

Синтаксис

UTCTimestamp()

Аргументы

  • Нет. Возвращаемое значение

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

Примеры

Получить текущий UTC timestamp

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

YYYYMMDDToDate

Введено в: v23.9

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

Синтаксис

YYYYMMDDToDate(YYYYMMDD)

Аргументы

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

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

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

Примеры

Пример

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

YYYYMMDDToDate32

Введено в: v23.9

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

Синтаксис

YYYYMMDDToDate32(YYYYMMDD)

Аргументы

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

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

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

Примеры

Пример

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

YYYYMMDDhhmmssToDateTime

Введено в: v23.9

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

Синтаксис

YYYYMMDDhhmmssToDateTime(YYYYMMDDhhmmss[, timezone])

Аргументы

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

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

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

Примеры

Пример

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

YYYYMMDDhhmmssToDateTime64

Введено в: v23.9

Преобразует число, содержащее год, месяц, день, час, минуту и секунду, в 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');
┌─YYYYMMDDhhmm⋯/Istanbul')─┐
│  2023-09-11 13:14:15.000 │
└──────────────────────────┘

addDate

Введено в: v23.9

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

Синтаксис

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(toDa⋯valYear(3))─┐
│               2021-01-01 │
└──────────────────────────┘

addDays

Введено в: v1.1

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

Синтаксис

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('1⋯valDay(10))─┐
│               1998-06-26 │
└──────────────────────────┘

addHours

Введено в: v1.1

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

Синтаксис

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('1⋯alHour(10))─┐
│      1998-06-16 10:00:00 │
└──────────────────────────┘

addInterval

Введено в: v22.11

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

примечание

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

Синтаксис

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

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

Синтаксис

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('19⋯osecond(10))─┐
│ 1998-06-16 00:00:00.000010 │
└────────────────────────────┘

addMilliseconds

Введено в: v22.6

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

Синтаксис

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('1⋯second(10))─┐
│  1998-06-16 00:00:00.010 │
└──────────────────────────┘

addMinutes

Введено в: v1.1

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

Синтаксис

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('1⋯Minute(10))─┐
│      1998-06-16 00:10:00 │
└──────────────────────────┘

addMonths

Введено в: v1.1

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

Синтаксис

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('1⋯lMonth(10))─┐
│               1999-04-16 │
└──────────────────────────┘

addNanoseconds

Введено в: v22.6

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

Синтаксис

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('199⋯osecond(1000))─┐
│ 1998-06-16 00:00:00.000001000 │
└───────────────────────────────┘

addQuarters

Введено в: v20.1

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

Синтаксис

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('1⋯uarter(10))─┐
│               2000-12-16 │
└──────────────────────────┘

addSeconds

Введено в: v1.1

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

Синтаксис

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)
┌─dateAdd('1998-06-16'::Date, INTERVAL 10 second)─┐
│                             1998-06-16 00:00:10 │
└─────────────────────────────────────────────────┘

addTupleOfIntervals

Введено в: v22.11

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

Синтаксис

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

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

Синтаксис

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('1⋯alWeek(10))─┐
│               1998-08-25 │
└──────────────────────────┘

addYears

Введено в: v1.1

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

Синтаксис

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('1⋯alYear(10))─┐
│               2008-06-16 │
└──────────────────────────┘

age

Введено в: v23.1

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

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

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

Синтаксис

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

Аргументы

  • unit — Тип интервала для результата.
ЕдиницаВозможные значения
наносекундананосекунда, наносекунды, ns
микросекундамикросекунда, микросекунды, us, u
миллисекундамиллисекунда, миллисекунды, ms
секундасекунда, секунды, ss, s
минутаминута, минуты, mi, n
часчас, часы, hh, h
деньдень, дни, dd, d
неделянеделя, недели, wk, ww
месяцмесяц, месяцы, mm, m
кварталквартал, кварталы, qq, q
годгод, годы, yyyy, yy
  • startdate — Первое временное значение для вычитания (вычитаемое). Date или Date32 или DateTime или DateTime64
  • enddate — Второе временное значение для вычитания (уменьшаемое). Date или Date32 или DateTime или DateTime64
  • timezone — Необязательный. Название часового пояса. Если указано, оно применяется к обоим значениям startdate и enddate. Если не указано, используются часовые пояса startdate и enddate. Если они не совпадают, результат не определён. String

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

Возвращает разность между enddate и startdate, выраженную в единицах. 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

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

Синтаксис

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

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

Синтаксис

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

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

Синтаксис

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

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

Синтаксис

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

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

Синтаксис

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

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

Синтаксис

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

dateName

Введено в: v21.7

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

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

  • 'год'
  • 'квартал'
  • 'месяц'
  • 'неделя'
  • 'день года'
  • 'день'
  • 'день недели'
  • 'час'
  • 'минута'
  • 'секунда'

Синтаксис

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

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

Синтаксис

dateTrunc(unit, datetime[, timezone])

Аргументы

  • unit — Тип интервала, до которого обрезается результат. Аргумент unit не чувствителен к регистру. | Единица | Совместимость | |------------------|---------------------------------| | наносекунда | Совместимо только с DateTime64 | | микросекунда | Совместимо только с DateTime64 | | миллисекунда | Совместимо только с DateTime64 | | секунда | | | минута | | | час | | | день | | | неделя | | | месяц | | | квартал | | | год | | String
  • datetime — Дата и время. Date или Date32 или DateTime или DateTime64
  • timezone — Необязательный. Название часового пояса для возвращаемого datetime. Если не указано, функция использует часовой пояс параметра datetime. String

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

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

Аргумент единицыАргумент datetimeТип возврат
Год, Квартал, Месяц, НеделяDate32 или DateTime64 или Date или DateTimeDate32 или Date
День, Час, Минута, СекундаDate32, DateTime64, Date, или DateTimeDateTime64 или DateTime
Миллисекунда, Микросекунда,ЛюбойDateTime64
Наносекундас масштабом 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

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

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

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

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

Поля замены:

ЗаполнительОписаниеПример
%aсокращенное имя дня недели (Пн-Вс)Пн
%bсокращенное имя месяца (Янв-Дек)Янв
%cмесяц как целое число (01-12)01
%Cгод, деленный на 100 и округленный до целого (00-99)20
%dдень месяца, с нулевым дополнением (01-31)02
%Dкороткая дата MM/DD/YY, эквивалентная %m/%d/%y01/02/18
%eдень месяца, с пробелом перед (1-31)2
%fдробная секунда123456
%Fкороткая дата YYYY-MM-DD, эквивалентная %Y-%m-%d2018-01-02
%gдвузначный формат года, выровненный по ISO 860118
%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полное имя месяца (Январь-Декабрь)Январь
%nсимвол новой строки
%pобозначение AM или PMPM
%Qквартал (1-4)1
%r12-часовое время HH:MM AM/PM, эквивалентное %h:%i %p10:30 PM
%R24-часовое время HH:MM, эквивалентное %H:%i22:33
%sсекунда (00-59)44
%Sсекунда (00-59)44
%tгоризонтальный символ табуляции
%Tформат времени ISO 8601 (HH:MM:SS), эквивалентный %H:%i:%S22:33:44
%uдень недели ISO 8601 как число, где понедельник - 1 (1-7)2
%Vномер недели ISO 8601 (01-53)01
%wдень недели как целое число, где воскресенье - 0 (0-6)2
%Wполное имя дня недели (Понедельник-Воскресенье)Понедельник
%yГод, последние две цифры (00-99)18
%YГод2018
%zСмещение времени от UTC как +HHMM или -HHMM-0500
%%символ %%
  • В версиях ClickHouse ранее v23.4 %f выводит один ноль (0), если форматируемое значение является Date, Date32 или DateTime (которые не имеют дробных секунд) или DateTime64 с точностью 0.
  • В версиях ClickHouse ранее v25.1 %f выводит столько цифр, сколько указано в масштабе DateTime64, вместо фиксированных 6 цифр.
  • В версиях ClickHouse ранее v23.4 %M выводит минуту (00-59), а не полное имя месяца (Январь-Декабрь).

Синтаксис

formatDateTime(datetime, format[, timezone])

Аргументы

  • datetime — Дата или дата с временем для форматирования. Date или Date32 или DateTime или 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')─┐
│ 1234560                                                             │
└─────────────────────────────────────────────────────────────────────┘

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

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

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

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

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

Поля замены:

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

Синтаксис

formatDateTimeInJodaSyntax(datetime, format[, timezone])

Аргументы

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

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

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

Примеры

Форматировать дату и время, используя синтаксис 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

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

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

Синтаксис

fromDaysSinceYearZero(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

Для заданного числа дней, прошедших с 1 января 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

Преобразует число Модифицированного Юлианского Дня в дату пролектического григорианского календаря в текстовом формате 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

Похоже на fromModifiedJulianDay(), но вместо вызова исключений возвращает NULL.

Синтаксис

fromModifiedJulianDayOrNull(day)

Аргументы

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

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

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

Примеры

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

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

fromUTCTimestamp

Представлено в: v22.1

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

Синтаксис

fromUTCTimestamp(datetime, time_zone)

Аргументы

  • datetime — Константное значение даты или даты с временем или выражение. DateTime или DateTime64
  • time_zone — Константное значение строки или выражение, представляющее часовой пояс. 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

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

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

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

Синтаксис

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

Аргументы

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

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

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

Примеры

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

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

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

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

fromUnixTimestampInJodaSyntax

Представлено в: v23.1

Эта функция преобразует 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 │
└─────────────────────┘

makeDate

Представлено в: v22.6

Создает Date из одного из следующих:

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

Синтаксис

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

Аргументы

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

Возвращает значение 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

Создает 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

Создает 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

Создает 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

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

Синтаксис

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

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

Синтаксис

now([timezone])

Аргументы

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

now64

Представлено в: v20.1

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

Синтаксис

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

Возвращает текущую дату и время в момент обработки каждого блока данных. В отличие от функции 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

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

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

Синтаксис

nowInBlock([scale[, timezone]])

Аргументы

  • scale — Необязательный. Размер тика (точность): 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

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

Синтаксис

serverTimeZone()

Аргументы

  • Не требуется.

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

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

Примеры

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

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

subDate

Представлено в: v23.9

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

Синтаксис

subDate(datetime, interval)

Аргументы

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

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

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

Примеры

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

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

subtractDays

Представлено в: v1.1

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

Синтаксис

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('⋯valDay(10))─┐
│               1998-06-06 │
└──────────────────────────┘

subtractHours

Представлено в: v1.1

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

Синтаксис

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('⋯alHour(10))─┐
│      1998-06-15 14:00:00 │
└──────────────────────────┘

subtractInterval

Представлено в: v22.11

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

Примечание: интервалы одного типа будут объединяться в один интервал. Например, если передаются 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

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

Синтаксис

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('1⋯osecond(10))─┐
│ 1998-06-15 23:59:59.999990 │
└────────────────────────────┘

subtractMilliseconds

Введено в: v22.6

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

Синтаксис

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('⋯second(10))─┐
│  1998-06-15 23:59:59.990 │
└──────────────────────────┘

subtractMinutes

Введено в: v1.1

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

Синтаксис

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('⋯Minute(10))─┐
│      1998-06-15 23:50:00 │
└──────────────────────────┘

subtractMonths

Введено в: v1.1

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

Синтаксис

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('⋯lMonth(10))─┐
│               1997-08-16 │
└──────────────────────────┘

subtractNanoseconds

Введено в: v20.1

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

Синтаксис

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('19⋯anosecond(10))─┐
│ 1998-06-15 23:59:59.999999990 │
└───────────────────────────────┘

subtractQuarters

Введено в: v20.1

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

Синтаксис

subtractQuarters(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
    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('1⋯Quarter(10))─┐
│                1996-09-16 │
└───────────────────────────┘

subtractSeconds

Введено в: v1.1

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

Синтаксис

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('⋯Second(10))─┐
│      1998-06-15 23:59:50 │
└──────────────────────────┘

subtractTupleOfIntervals

Введено в: v22.11

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

Синтаксис

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))
┌─subtractTupl⋯alYear(1)))─┐
│               2016-12-31 │
└──────────────────────────┘

subtractWeeks

Введено в: v1.1

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

Синтаксис

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('⋯alWeek(10))─┐
│               1998-04-07 │
└──────────────────────────┘

subtractYears

Введено в: v1.1

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

Синтаксис

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('⋯alYear(10))─┐
│               1988-06-16 │
└──────────────────────────┘

timeDiff

Введено в: v23.4

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

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

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

Синтаксис

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

Аргументы

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

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

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

Примеры

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

SELECT timeDiff('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,
    timeDiff('day', s, e) AS day_diff,
    timeDiff('month', s, e) AS month_diff,
    timeDiff('year', s, e) AS year_diff
┌──────────e─┬──────────s─┬─day_diff─┬─month_diff─┬─year_diff─┐
│ 2022-01-01 │ 2021-12-29 │        3 │          1 │         1 │
└────────────┴────────────┴──────────┴────────────┴───────────┘

timeSlot

Введено в: v1.1

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

примечание

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

Синтаксис

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

Для временного интервала, начинающегося с 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']                        │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────┘

timestamp

Введено в: v23.9

Приводит первый аргумент 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

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

Синтаксис

timezone()

Аргументы

  • Нет. Возвращаемое значение

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

Примеры

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

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

timezoneOf

Введено в: v21.4

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

Синтаксис

timeZoneOf(datetime)

Аргументы

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

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

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

Примеры

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

SELECT timezoneOf(now());
┌─timezoneOf(now())─┐
│ Europe/Amsterdam  │
└───────────────────┘

timezoneOffset

Введено в: v21.6

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

Синтаксис

timeZoneOffset(datetime)

Аргументы

  • 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

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

Синтаксис

toDayOfMonth(datetime)

Аргументы

  • 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

Возвращает номер дня недели для значения 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]])

Аргументы

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

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

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

Примеры

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

-- The following date is April 21, 2023, which was a Friday:
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

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

Синтаксис

toDayOfYear(datetime)

Аргументы

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

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

Возвращает день года для заданной даты или времени UInt16

Примеры

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

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

toDaysSinceYearZero

Введено в: v23.9

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

Расчет такой же, как в функции MySQL TO_DAYS.

Синтаксис

toDaysSinceYearZero(date[, time_zone])

Аргументы

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

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

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

Примеры

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

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

toHour

Введено в: v1.1

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

Синтаксис

toHour(datetime)

Аргументы

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

toISOYear

Введено в: v18.4

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

Синтаксис

toISOYear(datetime)

Аргументы

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

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

Примеры

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

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

toLastDayOfMonth

Введено в: v1.1

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

toLastDayOfMonth(value)

Аргументы

  • 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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

Аргументы

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

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

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

Примеры

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

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-23
toLastDayOfWeek(toDateTime('2023-04-21 10:20:30'), 1):   2023-04-22
toLastDayOfWeek(toDate('2023-04-23')):                   2023-04-23
toLastDayOfWeek(toDate('2023-04-23'), 1):                2023-04-23

toMillisecond

Введено в: v24.2

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

Синтаксис

toMillisecond(datetime)

Аргументы

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

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

Возвращает миллисекунду в минуте (0 - 999) для 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-59) для значения Date или DateTime.

Синтаксис

toMinute(datetime)

Аргументы

  • 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

Преобразует дату в текстовом формате пролептического григорианского календаря 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

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

Синтаксис

toModifiedJulianDayOrNull(date)

Аргументы

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

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

Примеры

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

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

toMonday

Введено в: v1.1

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

Синтаксис

toMonth(datetime)

Аргументы

  • 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

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

Синтаксис

toMonthNumSinceEpoch(date)

Аргументы

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

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

Примеры

Пример

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

toQuarter

Введено в: v1.1

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

Синтаксис

toQuarter(datetime)

Аргументы

  • 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

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

Синтаксис

toRelativeDayNum(date)

Аргументы

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

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

Примеры

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

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

toRelativeHourNum

Представлено в: v1.1

Преобразует дату или дату с временем в количество часов, прошедших с определенной фиксированной точки в прошлом. Точная точка времени является деталями реализации, и следовательно, эта функция не предназначена для использования в автономном режиме. Основная цель функции — вычислить разницу в часах между двумя датами или датами с временем, например, 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

Преобразует дату или дату с временем в количество минут, прошедших с определенной фиксированной точки в прошлом. Точная точка времени является деталями реализации, и следовательно, эта функция не предназначена для использования в автономном режиме. Основная цель функции — вычислить разницу в минутах между двумя датами или датами с временем, например, 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

Преобразует дату или дату с временем в количество месяцев, прошедших с определенной фиксированной точки в прошлом. Точная точка времени является деталями реализации, и следовательно, эта функция не предназначена для использования в автономном режиме. Основная цель функции — вычислить разницу в месяцах между двумя датами или датами с временем, например, 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

Преобразует дату или дату с временем в количество кварталов, прошедших с определенной фиксированной точки в прошлом. Точная точка времени является деталями реализации, и следовательно, эта функция не предназначена для использования в автономном режиме. Основная цель функции — вычислить разницу в кварталах между двумя датами или датами с временем, например, 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

Преобразует дату или дату с временем в количество секунд, прошедших с определенной фиксированной точки в прошлом. Точная точка времени является деталями реализации, и следовательно, эта функция не предназначена для использования в автономном режиме. Основная цель функции — вычислить разницу в секундах между двумя датами или датами с временем, например, 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

Преобразует дату или дату с временем в количество недель, прошедших с определенной фиксированной точки в прошлом. Точная точка времени является деталями реализации, и следовательно, эта функция не предназначена для использования в автономном режиме. Основная цель функции — вычислить разницу в неделях между двумя датами или датами с временем, например, 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

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

Синтаксис

toRelativeYearNum(date)

Аргументы

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

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

Примеры

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

SELECT toRelativeYearNum('2010-10-01'::DateTime) - toRelativeYearNum('2000-01-01'::DateTime)
┌─minus(toRela⋯ateTime')))─┐
│                       10 │
└──────────────────────────┘

toSecond

Представлено в: v1.1

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

Синтаксис

toSecond(datetime)

Аргументы

  • 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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

toStartOfDay(datetime)

Аргументы

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

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

Возвращает дату с временем, округленную до начала дня. Date или DateTime или Date32 или 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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

toStartOfFiveMinutes(datetime)

Аргументы

  • 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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

toStartOfHour(datetime)

Аргументы

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

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

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

Примеры

Округление до начала часа

SELECT
    toStartOfHour(toDateTime('2023-04-21 10:20:30'));
┌─────────────────res─┬─toTypeName(res)─┐
│ 2023-04-21 10:00:00 │ DateTime        │
└─────────────────────┴─────────────────┘

toStartOfISOYear

Представлено в: v1.1

Округляет дату или дату с временем до первого дня ISO года, который может отличаться от обычного года. См. ISO week date.

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

Например,

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

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

ИнтервалНачало
ГОДгод 0
КВАРТАЛ1900 Q1
МЕСЯЦЯнварь 1900
НЕДЕЛЯ1970, 1-я неделя (01-05)
ДЕНЬ1970-01-01
ЧАС(*)
МИНУТА1970-01-01 00:00:00
СЕКУНДА1970-01-01 00:00:00
МИЛЛИСЕКУНДА1970-01-01 00:00:00
МИКРОСЕКУНДА1970-01-01 00:00:00
НАНОСЕКУНДА1970-01-01 00:00:00
(*) Часовые интервалы являются особенными: вычисление всегда выполняется относительно 00:00:00 (полночь) текущего дня. В результате только значения часов между 1 и 23 полезны.

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

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

Синтаксис

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

Аргументы

  • value — Дата или дата с временем, которую нужно округлить. Date или DateTime или DateTime64
  • x — Число длины интервала. - unit — Единица интервала: ГОД, КВАРТАЛ, МЕСЯЦ, НЕДЕЛЯ, ДЕНЬ, ЧАС, МИНУТА, СЕКУНДА, МИЛЛИСЕКУНДА, МИКРОСЕКУНДА, НАНОСЕКУНДА. - time_zone — Необязательный. Название временной зоны в виде строки. - origin — Необязательный. Точка отсчета для вычислений (только для второй перегрузки).

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

Возвращает начало интервала, содержащего входное значение. DateTime

Примеры

Основное округление интервала

SELECT toStartOfInterval(toDateTime('2023-01-15 14:30:00'), INTERVAL 1 MONTH)
┌─toStartOfInt⋯alMonth(1))─┐
│               2023-01-01 │
└──────────────────────────┘

Использование точки отсчета

SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'))
┌─toStartOfInt⋯14:35:30'))─┐
│      2023-01-01 14:44:30 │
└──────────────────────────┘

toStartOfMicrosecond

Представлено в: v22.6

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

Синтаксис

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 12:20:30.999999000 │
└─────────────────────────────────────────────┘

toStartOfMillisecond

Представлено в: v22.6

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

Синтаксис

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 12:20:30.999000000 │
└─────────────────────────────────────────────┘

toStartOfMinute

Представлено в: v1.1

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

Синтаксис

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 12:20:30.999999999 │
└────────────────────────────────────────────┘

toStartOfQuarter

Представлено в: v1.1

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

Синтаксис

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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

Аргументы

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

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

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

Примеры

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

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-17
    toStartOfWeek(toDateTime('2023-04-21 10:20:30'), 1):   2023-04-17
    toStartOfWeek(toDate('2023-04-24')):                   2023-04-24
    toStartOfWeek(toDate('2023-04-24'), 1):                2023-04-24

toStartOfYear

Представлено в: v1.1

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

примечание

Тип возвращаемого значения можно настроить, установив enable_extended_results_for_datetime_functions.

Синтаксис

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

Представлено в: v1.1

Извлекает компонент времени из даты или даты с временем. Возвращаемый результат — смещение относительно фиксированной точки времени, в настоящее время 1970-01-02, но точная точка времени является деталями реализации, которая может измениться в будущем.

toTime поэтому не должен использоваться в автономном режиме. Основная цель функции — вычислить разницу во времени между двумя датами или датами с временем, например, toTime(dt1) - toTime(dt2).

Синтаксис

toTime(date[, timezone])

Аргументы

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

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

Возвращает компонент времени даты или даты с временем в виде смещения относительно фиксированной точки времени (выбранной как 1970-01-02, в настоящее время). DateTime

Примеры

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

SELECT toTime('2025-06-15 12:00:00'::DateTime) - toTime('2024-05-10 11:00:00'::DateTime) AS result, toTypeName(result)
┌─result─┬─toTypeName(result)─┐
│   3600 │ Int32              │
└────────┴────────────────────┘

toTimezone

Представлено в: v1.1

Преобразует DateTime или DateTime64 в указанную временную зону. Внутреннее значение (количество секунд unix) данных не изменяется. Изменяются только атрибут временной зоны значения и строковое представление значения.

Синтаксис

toTimeZone(datetime, timezone)

Аргументы

  • 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;
Row 1:
──────
time_utc:   2019-01-01 00:00:00
type_utc:   DateTime('UTC')
int32utc:   1546300800
time_yekat: 2019-01-01 05:00:00
type_yekat: DateTime('Asia/Yekaterinburg')
int32yekat: 1546300800
time_samoa: 2018-12-31 13:00:00
type_samoa: DateTime('US/Samoa')
int32samoa: 1546300800

toUTCTimestamp

Представлено в: v23.8

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

Синтаксис

toUTCTimestamp(datetime, time_zone)

Аргументы

  • datetime — Дата или дата с временем типа const значение или выражение. DateTime или DateTime64
  • time_zone — Строковое значение типа const или выражение, представляющее временную зону. 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

Преобразует String, Date или DateTime в метку времени Unix (секунды с 1970-01-01 00:00:00 UTC) в формате UInt32.

Синтаксис

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;
Row 1:
──────
dt_str:          2017-11-05 08:07:47
from_str:        1509869267
from_str_tokyo:  1509836867
from_datetime:   1509869267
from_datetime64: 1509869267
from_date:       1509840000
from_date32:     1509840000

toWeek

Представлено в: v20.1

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

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

В следующей таблице описано, как работает аргумент режима.

РежимПервый день неделиДиапазонНеделя 1 — первая неделя ...
0Воскресенье0-53с воскресеньем в этом году
1Понедельник0-53с 4 или более днями в этом году
2Воскресенье1-53с воскресеньем в этом году
3Понедельник1-53с 4 или более днями в этом году
4Воскресенье0-53с 4 или более днями в этом году
5Понедельник0-53с понедельником в этом году
6Воскресенье1-53с 4 или более днями в этом году
7Понедельник1-53с понедельником в этом году
8Воскресенье1-53содержит 1 января
9Понедельник1-53содержит 1 января

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

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

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

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

Синтаксис

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

Аргументы

  • 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

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

Эта функция является противоположной функции 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')─┐
│                        202303 │
└───────────────────────────────┘

toYYYYMMDD

Введено в: v1.1

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

Синтаксис

toYYYYMMDD(datetime[, timezone])

Аргументы

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

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

Возвращает число UInt32, содержащее номер года, месяца и дня (YYYY * 10000 + MM * 100 + DD). UInt32

Примеры

Конвертация текущей даты в формат YYYYMMDD

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

toYYYYMMDDhhmmss

Введено в: v1.1

Конвертирует дату или дату с временем в число 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(now(), 'US/Eastern')
┌─toYYYYMMDDhhmmss(now(), 'US/Eastern')─┐
│                        20230302112209 │
└───────────────────────────────────────┘

toYear

Введено в: v1.1

Возвращает компонент года (н.э.) значения Date или DateTime.

Синтаксис

toYear(datetime)

Аргументы

  • datetime — Дата или дата с временем для получения года. Date или Date32 или DateTime или DateTime64

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

Возвращает год заданной даты или времени UInt16

Примеры

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

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

toYearNumSinceEpoch

Введено в: v25.3

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

Синтаксис

toYearNumSinceEpoch(date)

Аргументы

  • date — Дата или дата с временем для конвертации. Date или DateTime или DateTime64

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

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

Примеры

Пример

SELECT toYearNumSinceEpoch(toDate('2024-10-01'))
54

toYearWeek

Введено в: v20.1

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

Аргумент mode работает так же, как аргумент mode функции toWeek().

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

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

Синтаксис

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

Аргументы

  • 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

Возвращает текущую дату на момент анализа запроса. То же самое, что и toDate(now()).

Синтаксис

today()

Аргументы

  • Нет. Возвращаемое значение

Возвращает текущую дату Date

Примеры

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

SELECT today() AS today, curdate() AS curdate, current_date() AS current_date FORMAT Pretty
┏━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃      today ┃    curdate ┃ current_date ┃
┡━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ 2025-03-03 │ 2025-03-03 │   2025-03-03 │
└────────────┴────────────┴──────────────┘

yesterday

Введено в: v1.1

Принимает ноль аргументов и возвращает дату вчера на одном из моментов анализа запроса.

Синтаксис

yesterday()

Аргументы

  • Нет. Возвращаемое значение

Возвращает дату вчера. Date

Примеры

Получить дату вчера

SELECT yesterday();
SELECT today() - 1;
┌─yesterday()─┐
│  2025-06-09 │
└─────────────┘
┌─minus(today(), 1)─┐
│        2025-06-09 │
└───────────────────┘