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

Как получить текущую дату в sql

  • автор:

Как поставить текущую дату в DATETIME?

Остаток на текущую дату и отчет по клиентам на текущую дату в одном отчете
Добрый день. Нужна помощь. Нужно вывести остаток на текущую дату в запросе ОСТАТКИ как показано.

Как вывести текущую дату
Здравствуйте. Помогите с кодом, который будет выводить на странице текущую дату в формате.

Как получить текущую дату?
Всем привет! Хочу сделать так что бы в Edit-е у меня автоматически записывалась дата, от компа.

Как получить текущую дату?
Подскажите пожалуйста, как получить текущую дату ?

Администратор

Эксперт .NET

16468 / 12932 / 5092
Регистрация: 17.03.2014
Сообщений: 26,347
Записей в блоге: 1
Нико_лас21, GETDATE
Регистрация: 04.11.2017
Сообщений: 17

ЦитатаСообщение от OwenGlendower Посмотреть сообщение

Нико_лас21, GETDATE
либо я не понимаю куда это ставить, либо оно просто не работает
3314 / 2354 / 666
Регистрация: 02.08.2011
Сообщений: 6,447

ЦитатаСообщение от Нико_лас21 Посмотреть сообщение

либо я не понимаю куда это ставить, либо оно просто не работает
В скрипт создания таблицы добавьте для колонки saledate:

[saledate] datetime NULL DEFAULT getdate(), -- и т.д

И выполните руками этот скрипт.
Регистрация: 04.11.2017
Сообщений: 17

ЦитатаСообщение от IamRain Посмотреть сообщение

В скрипт создания таблицы добавьте для колонки saledate:
SQLВыделить код
1
2
[saledate] datetime NULL DEFAULT getdate(),
— и т.д
И выполните руками этот скрипт.

все сделала, ошибок не выдает, все нормально. Но, толку никакого, текущую дату так и не ставит(
3314 / 2354 / 666
Регистрация: 02.08.2011
Сообщений: 6,447
Да ладно , у меня ведь работает.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
GO CREATE TABLE Test (id INT IDENTITY(1,1) PRIMARY KEY, OrderDate datetime NOT NULL DEFAULT getdate(), DataColumn VARCHAR(300) NOT NULL); INSERT Test(DataColumn) VALUES ('One'), ('Second'), ('Third'), ('4th'), ('5th') SELECT * FROM dbo.Test DROP TABLE dbo.Test

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Получить текущую дату без времени и вычесть другую дату
Ребята нужна помощь знатоков. Беру с сайта дату List<IWebElement> datew =.

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

Расчет возраста, имея дату рождения и текущую дату
наверняка у кого-то есть функция? Есть поле дата рождения и текущая дата. Как посчитать возраст? .

Приложение, сравнивающее текущую дату и дату, введенную пользователем.
Напишите приложение, сравнивающее текущую дату и дату, введенную пользователем. Если введенная дата.

Как выполнить запрос SQL по текущей дате если тип даты datetime?

Есть столбец DATE с типом DATETIME , нужно выбрать все записи с сегодняшней датой.
select date from table where date=getdate() не работает. если ставить операторы меньше или равно либо between тогда работает.

  • Вопрос задан более трёх лет назад
  • 1022 просмотра

2 комментария

Простой 2 комментария

heavybrain @heavybrain Автор вопроса
так же если просто написать например =’20190808′ тоже не работает, через trunkdate работает

Для понимания.
Тип данных date — это 20190101
datetime — 20190101 00:00:00.000

Соответственно, если ты просто хочешь выбрать по getdate(), то ты получаешь 20190101 14:20:21.333, например, а такого нет.
Поэтому, тебе нужно приводить к одному виду данные, либо же использовать период.

Получение текущей даты и времени в PL/SQL

Текущее время и дата в PL/SQL для программирования

В любом языке программирования важно знать, как получить текущую дату и время. Обычно это один из самых первых вопросов, возникающих при работе с датами в приложениях. До выхода Oracle8i в PL/SQL существовал только один способ получения даты и времени: функция SYSDATE . Начиная с Oracle9i, в вашем распоряжении появились все функции из табл. 10.1. От вас лишь требуется понять, как они работают и какие преимущества дает тот или иной вариант.

Функция Часовой пояс Тип возвращаемого значения
CURRENT_DATE Сеанс DATE
CURRENT_TIMESTAMP Сеанс TIMESTAMP WITH TIME ZONE
LOCALTIMESTAMP Сеанс TIMESTAMP
SYSDATE Сервер базы данных DATE
SYSTIMESTAMP Сервер базы данных TIMESTAMP WITH TIME ZONE

Какую же функцию использовать в конкретной ситуации? Ответ зависит от нескольких факторов, которые, вероятно, стоит рассматривать в следующем порядке:

  1. Если вы используете версию, предшествующую Oracle8i, или должны обеспечить совместимость с ней, выбор небогат: используйте SYSDATE .
  2. Какое время вас интересует — вашего сеанса или сервера базы данных? В первом случае используйте функцию, возвращающую сеансовое время, а во втором — функцию, возвращающую часовой пояс базы данных.
  3. Должен ли часовой пояс возвращаться в составе текущей даты и времени? Если должен, используйте функцию SYSTIMESTAMP или CURRENT_TIMESTAMP .

Если будет выбрана функция, возвращающая сеансовое время, проследите за тем, чтобы часовой пояс сеанса был задан правильно. Информацию о часовом поясе сеанса и базы данных можно получить при помощи функций SESSIONTIMEZONE и DBTIMEZONE соответственно. Чтобы получить время в часовом поясе базы данных, необходимо изменить часовой пояс сеанса на DBTIMEZONE , а затем использовать одну из сеансовых функций.

Примеры использования этих функций:

BEGIN DBMS_OUTPUT.PUT_LINE('Session Timezone='||SESSIONTIMEZONE); DBMS_OUTPUT.PUT_LINE('Session Timestamp='||CURRENT_TIMESTAMP); DBMS_OUTPUT.PUT_LINE('DB Server Timestamp='||SYSTIMESTAMP); DBMS_OUTPUT.PUT_LINE('DB Timezone='||DBTIMEZONE); EXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE=DBTIMEZONE'; DBMS_OUTPUT.PUT_LINE('DB Timestamp='||CURRENT_TIMESTAMP); -- Возврат часового пояса сеанса к местному значению EXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE=LOCAL'; END; Результат: Session Timezone=-04:00 Session Timestamp=23-JUN-08 12.48.44.656003000 PM -04:00 DB Server Timestamp=23-JUN-08 11.48.44.656106000 AM -05:00 DB Timezone=+00:00 DB Timestamp=23-JUN-08 04.48.44.656396000 PM +00:00

В этом примере сеанс начинается в Восточном часовом поясе (–4:00), тогда как сервер работает по времени Центрального часового пояса (–5:00), но при этом в самой базе данных используется время GMT (+00:00). Чтобы получить время в часовом поясе базы данных, мы сначала приводим часовой пояс сеанса в соответствие с часовым поясом базы данных, а затем вызываем функцию часового пояса сеанса CURRENT_TIMESTAMP . Наконец, часовой пояс сеанса снова возвращается с исходному местному значению.

Если вы используете эти функции для хронометража на уровне долей секунд, помните об ограничениях операционной системы и оборудования. Функции CURRENT_TIMESTAMP , LOCALTIMESTAMP и SYSTIMESTAMP возвращают значения в типах данных TIMESTAMP WITH TIME ZONE или TIMESTAMP , позволяющих определять время с разрешением до миллиардной доли секунды.

Все это, конечно, замечательно, но подумайте, откуда берется это время. База данных получает его от операционной системы в результате вызова GetTimeOfDay (Unix/ Linux), GetSystemTime (Microsoft Windows) или другой аналогичной функции операционной системы. В свою очередь, операционная система зависит от оборудования. Если операционная система или используемое оборудование способны отслеживать время с точностью до сотых долей секунды, база данных не сможет возвращать результаты с большей точностью. Например, в системе Linux на процессоре Intel x86 вы сможете отслеживать время с точностью до миллионной доли секунды (шесть цифр), тогда как при работе базы данных в Microsoft Windows XP или Vista на том же оборудовании обеспечивается точность до тысячной доли секунды. Кроме того, хотя операционная система может возвращать временной штамп с шестью знаками, результат может не соответствовать реальной точности в одну микросекунду.

Что делать, если функции, возвращающей нужный тип данных, не существует — например, если время сервера нужно получить в переменной TIMESTAMP ? Можно доверить неявное преобразование типов базе данных, но лучше воспользоваться явным преобразованием CAST . Пример:

DECLARE ts1 TIMESTAMP; ts2 TIMESTAMP; BEGIN ts1 := CAST(SYSTIMESTAMP AS TIMESTAMP); ts2 := SYSDATE; DBMS_OUTPUT.PUT_LINE(TO_CHAR(ts1,'DD-MON-YYYY HH:MI:SS AM')); DBMS_OUTPUT.PUT_LINE(TO_CHAR(ts2,'DD-MON-YYYY HH:MI:SS AM')); END; Результат: 24-FEB-2002 06:46:39 PM 24-FEB-2002 06:46:39 PM

Вызов SYSTIMESTAMP использует CAST для явного преобразования TIMESTAMP WITH TIME ZONE в TIMESTAMP . При вызове SYSDATE преобразование DATE в TIMESTAMP выполняется неявно.

ДЛЯ ЧЕГО НУЖНЫ ДВА ТИПА INTERVAL

Поначалу меня несколько удивило то, что Oracle ввела сразу два типа данных INTERVAL . Решение обрабатывать годы и месяцы отдельно от дней, часов минут и секунд выглядело довольно странно. Почему бы не создать единый тип данных INTERVAL , покрывающий все возможности? Однако оказалось, что за это нужно благодарить римского императора Юлия Цезаря (создателя юлианского календаря), определившего продолжительность большинства месяцев.

Два типа данных с разделительной линией на уровне месяцев пришлось определить потому, что месяц — это единственный компонент даты/времени с непостоянной продолжительностью. Возьмем интервал в 1 месяц и 30 дней. Какова его фактическая продолжительность? Меньше двух месяцев? Ровно два месяца? А может быть, больше? Если месяцем является январь, то через 30 дней уже наступит март, и получится интервал в 61 день, что уже несколько больше «двух месяцев». Если же этим месяцем является февраль, тогда интервал равен либо 59, либо 60 дням. Ну а если месяц — апрель, тогда интервал составит 60 дней.

Вместо того чтобы возиться со всеми этими сложностями, обусловленными разной продолжительностью месяцев и возникающими при сравнении интервалов, математических операциях с датами, а также при нормализации значений даты/времени, стандарт ISO SQL разбивает модель даты/времени на две части: в одной — год и месяц, во второй — все остальное. За дополнительной информацией по этому вопросу обращайтесь к книге A Guide to the SQL Standard (автор C.J. Date, издательство Addison-Wesley).

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

Все функции по работе с датой и временем, для которых это имеет смысл, могут принимать второй, необязательный аргумент — имя часового пояса. Пример: Asia/Yekaterinburg. В этом случае, они используют не локальный часовой пояс (по умолчанию), а указанный.

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

timeZone​

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

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

Синтаксис

timeZone() 

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

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

serverTimeZone​

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

Синтаксис

serverTimeZone() 

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

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

toTimeZone​

Переводит дату или дату с временем в указанный часовой пояс. Часовой пояс — это атрибут типов Date и DateTime . Внутреннее значение (количество секунд) поля таблицы или результирующего столбца не изменяется, изменяется тип поля и, соответственно, его текстовое отображение.

Синтаксис

toTimezone(value, timezone) 

Аргументы

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

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

Пример

SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc,  toTypeName(time_utc) AS type_utc,  toInt32(time_utc) AS int32utc,  toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat,  toTypeName(time_yekat) AS type_yekat,  toInt32(time_yekat) AS int32yekat,  toTimeZone(time_utc, 'US/Samoa') AS time_samoa,  toTypeName(time_samoa) AS type_samoa,  toInt32(time_samoa) AS int32samoa FORMAT Vertical; 
Row 1: ────── time_utc: 2019-01-01 00:00:00 type_utc: DateTime('UTC') int32utc: 1546300800 time_yekat: 2019-01-01 05:00:00 type_yekat: DateTime('Asia/Yekaterinburg') int32yekat: 1546300800 time_samoa: 2018-12-31 13:00:00 type_samoa: DateTime('US/Samoa') int32samoa: 1546300800 

toTimeZone(time_utc, ‘Asia/Yekaterinburg’) изменяет тип DateTime(‘UTC’) в DateTime(‘Asia/Yekaterinburg’) . Значение (unix-время) 1546300800 остается неизменным, но текстовое отображение (результат функции toString()) меняется time_utc: 2019-01-01 00:00:00 в time_yekat: 2019-01-01 05:00:00 .

timeZoneOf​

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

Синтаксис

timeZoneOf(value) 

Аргументы

  • value — Дата с временем. DateTime или DateTime64.

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

  • Название часового пояса.

Пример

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

timeZoneOffset​

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

Синтаксис

timeZoneOffset(value) 

Аргументы

  • value — Дата с временем. DateTime or DateTime64.

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

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

Пример

SELECT toDateTime('2021-04-21 10:20:30', 'Europe/Moscow') 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('Europe/Moscow') │ 10800 │ 3 │ └─────────────────────┴───────────────────────────┴───────────────────┴─────────────────┘ 

toYear​

Переводит дату или дату-с-временем в число типа UInt16, содержащее номер года (AD).

toQuarter​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер квартала.

toMonth​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер месяца (1-12).

toDayOfYear​

Переводит дату или дату-с-временем в число типа UInt16, содержащее номер дня года (1-366).

toDayOfMonth​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер дня в месяце (1-31).

Синонимы: DAYOFMONTH , DAY .

toDayOfWeek​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер дня в неделе (понедельник — 1, воскресенье — 7).

toHour​

Переводит дату-с-временем в число типа UInt8, содержащее номер часа в сутках (0-23). Функция исходит из допущения, что перевод стрелок вперёд, если осуществляется, то на час, в два часа ночи, а перевод стрелок назад, если осуществляется, то на час, в три часа ночи (что, в общем, не верно — даже в Москве два раза перевод стрелок был осуществлён в другое время).

toMinute​

Переводит дату-с-временем в число типа UInt8, содержащее номер минуты в часе (0-59).

toSecond​

Переводит дату-с-временем в число типа UInt8, содержащее номер секунды в минуте (0-59). Секунды координации не учитываются.

toUnixTimestamp​

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

Синтаксис

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

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

  • Возвращает Unix Timestamp.

Пример

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

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

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

    toStartOfYear​

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

    toStartOfISOYear​

    Округляет дату или дату-с-временем вниз до первого дня ISO года. Возвращается дата. Начало ISO года отличается от начала обычного года, потому что в соответствии с ISO 8601:1988 первая неделя года — это неделя с четырьмя или более днями в этом году.

    1 Января 2017 г. — воскресение, т.е. первая ISO неделя 2017 года началась в понедельник 2 января, поэтому 1 января 2017 это 2016 ISO-год, который начался 2016-01-04.

    SELECT toStartOfISOYear(toDate('2017-01-01')) AS ISOYear20170101; 
    ┌─ISOYear20170101─┐ │ 2016-01-04 │ └─────────────────┘ 

    toStartOfQuarter​

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

    toStartOfMonth​

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

    toLastDayOfMonth​

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

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

    toMonday​

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

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

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

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

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

    toStartOfDay​

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

    toStartOfHour​

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

    toStartOfMinute​

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

    toStartOfSecond​

    Отсекает доли секунды.

    Синтаксис

    toStartOfSecond(value, [timezone]) 

    Аргументы

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

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

    • Входное значение с отсеченными долями секунды.

    Примеры

    Пример без часового пояса:

    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, 'Europe/Moscow'); 
    ┌─toStartOfSecond(dt64, 'Europe/Moscow')─┐ │ 2020-01-01 13:20:30.000 │ └────────────────────────────────────────┘ 

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

    • Часовая зона сервера, конфигурационный параметр timezone.

    toStartOfFiveMinutes​

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

    toStartOfTenMinutes​

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

    toStartOfFifteenMinutes​

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

    toStartOfInterval(time_or_data, INTERVAL x unit [ , time_zone ] )​

    Обобщение остальных функций toStartOf* . Например, 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) , и т.п.

    toTime​

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

    toRelativeYearNum​

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

    toRelativeQuarterNum​

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

    toRelativeMonthNum​

    Переводит дату или дату-с-временем в номер месяца, начиная с некоторого фиксированного момента в прошлом.

    toRelativeWeekNum​

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

    toRelativeDayNum​

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

    toRelativeHourNum​

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

    toRelativeMinuteNum​

    Переводит дату-с-временем в номер минуты, начиная с некоторого фиксированного момента в прошлом.

    toRelativeSecondNum​

    Переводит дату-с-временем в номер секунды, начиная с некоторого фиксированного момента в прошлом.

    toISOYear​

    Переводит дату или дату-с-временем в число типа UInt16, содержащее номер ISO года. ISO год отличается от обычного года, потому что в соответствии с ISO 8601:1988 ISO год начинается необязательно первого января.

    Пример

    SELECT  toDate('2017-01-01') AS date,  toYear(date),  toISOYear(date) 
    ┌───────date─┬─toYear(toDate('2017-01-01'))─┬─toISOYear(toDate('2017-01-01'))─┐ │ 2017-01-01 │ 2017 │ 2016 │ └────────────┴──────────────────────────────┴─────────────────────────────────┘ 

    toISOWeek​

    Переводит дату или дату-с-временем в число типа UInt8, содержащее номер ISO недели. Начало ISO года отличается от начала обычного года, потому что в соответствии с ISO 8601:1988 первая неделя года — это неделя с четырьмя или более днями в этом году.

    1 Января 2017 г. — воскресение, т.е. первая ISO неделя 2017 года началась в понедельник 2 января, поэтому 1 января 2017 это последняя неделя 2016 года.

    Пример

    SELECT  toISOWeek(toDate('2017-01-01')) AS ISOWeek20170101,  toISOWeek(toDate('2017-01-02')) AS ISOWeek20170102 
    ┌─ISOWeek20170101─┬─ISOWeek20170102─┐ │ 52 │ 1 │ └─────────────────┴─────────────────┘ 

    toWeek(date [ , mode ] [ , timezone ] )​

    Переводит дату или дату-с-временем в число UInt8, содержащее номер недели. Второй аргументам mode задает режим, начинается ли неделя с воскресенья или с понедельника и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, то используется режим 0.

    toISOWeek() эквивалентно toWeek(date,3) .

    Описание режимов (mode):

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

    Для режимов со значением «с 4 или более днями в этом году» недели нумеруются в соответствии с ISO 8601:1988:

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

    Для режимов со значением «содержит 1 января», неделя 1 – это неделя содержащая 1 января. Не имеет значения, сколько дней в новом году содержала неделя, даже если она содержала только один день.

    Пример

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

    toYearWeek(date [,mode] )​

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

    Аргумент mode работает так же, как аргумент mode toWeek(), значение mode по умолчанию — 0 .

    toISOYear() эквивалентно intDiv(toYearWeek(date,3),100)

    Однако, есть отличие в работе функций toWeek() и toYearWeek() . toWeek() возвращает номер недели в контексте заданного года, и в случае, когда toWeek() вернёт 0 , toYearWeek() вернёт значение, соответствующее последней неделе предыдущего года (см. prev_yearWeek в примере).

    Пример

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

    age​

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

    Синтаксис

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

    Аргументы

    • unit — единица измерения времени, в которой будет выражено возвращаемое значение функции. String. Возможные значения:
      • microsecond (возможные сокращения: us , u )
      • millisecond (возможные сокращения: ms )
      • second (возможные сокращения: ss , s )
      • minute (возможные сокращения: mi , n )
      • hour (возможные сокращения: hh , h )
      • day (возможные сокращения: dd , d )
      • week (возможные сокращения: wk , ww )
      • month (возможные сокращения: mm , m )
      • quarter (возможные сокращения: qq , q )
      • year (возможные сокращения: yyyy , yy )

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

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

      Пример

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

      date _ diff​

      Вычисляет разницу указанных границ unit пересекаемых между startdate и enddate .

      Синтаксис

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

      Синонимы: dateDiff , DATE_DIFF .

      Аргументы

      • unit — единица измерения времени, в которой будет выражено возвращаемое значение функции. String. Возможные значения:
        • microsecond (возможные сокращения: us , u )
        • millisecond (возможные сокращения: ms )
        • second (возможные сокращения: ss , s )
        • minute (возможные сокращения: mi , n )
        • hour (возможные сокращения: hh , h )
        • day (возможные сокращения: dd , d )
        • week (возможные сокращения: wk , ww )
        • month (возможные сокращения: mm , m )
        • quarter (возможные сокращения: qq , q )
        • year (возможные сокращения: yyyy , yy )

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

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

        Пример

        SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')); 
        ┌─dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))─┐ │ 25 │ └────────────────────────────────────────────────────────────────────────────────────────┘ 

        date_trunc​

        Отсекает от даты и времени части, меньшие чем указанная часть.

        Синтаксис

        date_trunc(unit, value[, timezone]) 

        Аргументы

        • unit — единица измерения времени, в которой задана отсекаемая часть. String Literal. Возможные значения:
          • second
          • minute
          • hour
          • day
          • week
          • month
          • quarter
          • year

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

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

          Примеры

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

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

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

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

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

          date _ add​

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

          Синтаксис

          date_add(unit, value, date) 

          Синонимы: dateAdd , DATE_ADD .

          Аргументы

          • unit — единица измерения времени, в которой задан интервал для добавления. String. Возможные значения:
            • second
            • minute
            • hour
            • day
            • week
            • month
            • quarter
            • year

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

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

            Пример

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

            date _ sub​

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

            Синтаксис

            date_sub(unit, value, date) 

            Синонимы: dateSub , DATE_SUB .

            Аргументы

            • unit — единица измерения времени, в которой задан интервал для вычитания. String. Возможные значения:
              • second
              • minute
              • hour
              • day
              • week
              • month
              • quarter
              • year

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

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

              Пример

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

              timestamp _ add​

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

              Синтаксис

              timestamp_add(date, INTERVAL value unit) 

              Синонимы: timeStampAdd , TIMESTAMP_ADD .

              Аргументы

              • date — дата или дата со временем. Date или DateTime.
              • value — значение интервала для добавления. Int.
              • unit — единица измерения времени, в которой задан интервал для добавления. String. Возможные значения:
                • second
                • minute
                • hour
                • day
                • week
                • month
                • quarter
                • year

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

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

                Пример

                select timestamp_add(toDate('2018-01-01'), INTERVAL 3 MONTH); 
                ┌─plus(toDate('2018-01-01'), toIntervalMonth(3))─┐ │ 2018-04-01 │ └────────────────────────────────────────────────┘ 

                timestamp _ sub​

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

                Синтакис

                timestamp_sub(unit, value, date) 

                Синонимы: timeStampSub , TIMESTAMP_SUB .

                Аргументы

                • unit — единица измерения времени, в которой задан интервал для вычитания. String. Возможные значения:
                  • second
                  • minute
                  • hour
                  • day
                  • week
                  • month
                  • quarter
                  • year

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

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

                  Пример

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

                  now​

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

                  Синтаксис

                  now([timezone]) 

                  Параметры

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

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

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

                  Пример

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

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

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

                  SELECT now('Europe/Moscow'); 
                  ┌─now('Europe/Moscow')─┐ │ 2020-10-17 10:42:23 │ └──────────────────────┘ 

                  nowInBlock​

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

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

                  today​

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

                  yesterday​

                  Возвращает вчерашнюю дату на момент выполнения запроса. Делает то же самое, что today() — 1. Функция не требует аргументов.

                  timeSlot​

                  Округляет время до получаса. Эта функция является специфичной для Яндекс.Метрики, так как полчаса — минимальное время, для которого, если соседние по времени хиты одного посетителя на одном счётчике отстоят друг от друга строго более, чем на это время, визит может быть разбит на два визита. То есть, кортежи (номер счётчика, идентификатор посетителя, тайм-слот) могут использоваться для поиска хитов, входящий в соответствующий визит.

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

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

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

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

                  toYYYYMM​

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

                  toYYYYMMDD​

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

                  toYYYYMMDDhhmmss​

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

                  formatDateTime​

                  Функция преобразует дату-и-время в строку по заданному шаблону. Важно: шаблон — константное выражение, поэтому использовать разные шаблоны в одной колонке не получится.

                  Синтаксис

                  formatDateTime(Time, Format[, Timezone]) 

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

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

                  Поля подстановки

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

                  Поле Описание Пример
                  %C номер года, поделённый на 100 (00-99) 20
                  %d день месяца, с ведущим нулём (01-31) 02
                  %D короткая запись %m/%d/%y 01/02/18
                  %e день месяца, с ведущим пробелом ( 1-31) 2
                  %F короткая запись %Y-%m-%d 2018-01-02
                  %G четырехзначный формат вывода ISO-года, который основывается на особом подсчете номера недели согласно стандарту ISO 8601, обычно используется вместе с %V 2018
                  %g двузначный формат вывода года по стандарту ISO 8601 18
                  %H час в 24-часовом формате (00-23) 22
                  %I час в 12-часовом формате (01-12) 10
                  %j номер дня в году, с ведущими нулями (001-366) 002
                  %m месяц, с ведущим нулём (01-12) 01
                  %M минуты, с ведущим нулём (00-59) 33
                  %n символ переноса строки (‘’)
                  %p обозначения AM или PM PM
                  %Q квартал (1-4) 1
                  %R короткая запись %H:%M 22:33
                  %S секунды, с ведущими нулями (00-59) 44
                  %t символ табуляции (’)
                  %T формат времени ISO 8601, одинаковый с %H:%M:%S 22:33:44
                  %u номер дня недели согласно ISO 8601, понедельник — 1, воскресенье — 7 2
                  %V номер недели согласно ISO 8601 (01-53) 01
                  %w номер дня недели, начиная с воскресенья (0-6) 2
                  %y год, последние 2 цифры (00-99) 18
                  %Y год, 4 цифры 2018
                  %z Смещение времени от UTC +HHMM или -HHMM -0500
                  %% символ % %

                  Пример

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *