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

Содержание

Привет, сегодня я покажу, как в T-SQL из даты можно получить определенную часть этой даты, например, год, месяц, день и даже час, иными словами, в данном материале мы ответим на несколько вопросов, которые связаны с извлечением данных из значения, содержащего дату.

Как в T-SQL получить текущую дату?

Для начала давайте я расскажу о том, как в Microsoft SQL Server можно получить значение текущей даты.

Для получения текущей даты в Microsoft SQL Server существует несколько специальных системных функций. Давайте некоторые из этих функций рассмотрим.

  • GETDATE – функция возвращает значение, которое содержит дату и время компьютера, на котором запущен экземпляр Microsoft SQL Server, при этом смещение часового пояса не включается. Лично мне достаточно часто приходится пользоваться именно этой функцией;
  • CURRENT_TIMESTAMP – эта функция эквивалентна функции GETDATE, она возвращает точно такое же значение. Вы можете использовать любую функцию, но как я уже сказал, лично я отдаю предпочтение функции GETDATE;
  • SYSDATETIME – данная функция также возвращает дату и время компьютера, на котором запущен экземпляр Microsoft SQL Server, смещение часового пояса тоже не включается. Но в данном случае функция возвращает значение с более высокой точностью в долях секунды.

Примечание! Для того чтобы получить значение даты и времени с учетом смещения часового пояса, необходимо использовать функцию SYSDATETIMEOFFSET, а для того чтобы получить значение даты и времени в формате UTC функции GETUTCDATE или SYSUTCDATETIME.

Пример – получение текущей даты в Microsoft SQL Server

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

Как видите, результат практически одинаковый, за исключением того, что SYSDATETIME вернула более точное значение времени.

Как получить год из даты в T-SQL?

Если у Вас возникла необходимость из даты получить год, то есть, например, из 01.01.2019 получить 2019 в виде отдельного значения или просто из текущей даты получить год, то в Microsoft SQL Server Вы это можете сделать несколькими способами.

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

Второй способ предполагает использование другой функции T-SQL – это DATEPART, которая возвращает целое число, представляющее указанную часть даты.

DATEPART принимает два параметра: первый, datepart, т.е. какую часть даты нам нужно вернуть, второй, дата, которую необходимо обработать.

Пример – получаем год из даты в Microsoft SQL Server

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

Чтобы DATEPART нам вернула год из даты, первым параметром нам необходимо передать значение, характеризующее часть «год», допустимо передавать следующие значения: year, yyyy или yy.

Как получить месяц из даты в T-SQL?

В T-SQL из даты можно получить и номер месяца, для этого можно использовать функцию MONTH, она возвращает целое число, представляющее месяц указанной даты или все ту же функцию DATEPART, в которую, в данном случае необходимо будет передать значение, характеризующее часть даты «месяц», можно использовать: month, mm или m.

Пример – получаем месяц из даты в Microsoft SQL Server

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

Как из даты получить день в T-SQL?

Для того чтобы получить из даты день, в T-SQL можно использовать функцию DAY – это функция возвращает целое число, представляющее день указанной даты. Также можно использовать и уже знакомую функцию DATEPART со значением первого параметра: day, dd или d.

Читайте также:  Как делать анализ английского текста

Пример – получаем день из даты в Microsoft SQL Server

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

Как из даты получить час в T-SQL?

Чтобы из даты получить час, мы можем использовать функцию DATEPART со значением hour или hh. Только в данном случае второй параметр (date), в котором мы передаем значение даты, должен обязательно содержать время, т.е. иметь тип данных DATETIME, тип DATE не допускается.

Пример – получаем час из даты в Microsoft SQL Server

В этом примере мы из даты получаем час.

У меня все, надеюсь, перечисленные выше примеры помогут Вам в решении Ваших задач. Начинающим программистам рекомендую почитать книгу «Путь программиста T-SQL», в ней я рассказываю про все основные конструкции языка T-SQL, с помощью нее Вы научитесь работать с языком T-SQL с нуля.

Функция текущей даты SQL CURDATE() и её аналоги CURRENT_DATE() и CURRENT_DATE среди других функций даты и времени применяются наиболее часто из-за широких возможностей, обеспечиваемых ими для анализа данных. Знакомство с функциями даты и времени начнём с разбора практических примеров, демонстрирующих возможности функции текущей даты. А затем перейдём к остальным функциям даты и времени, соблюдая для удобства их классификацию по назначению.

Функция текущей даты SQL, её возможности

Функция текущей даты CURDATE() возвращает значение текущей даты в формате ‘YYYY-MM-DD’ и ‘YYYYDDMM’. Вычисляя несколькими способами (их как раз и разберём в этом параграфе) разницу значений дат, можно определить такие важные значения, как возраст человека, его трудовой стаж, продолжительность различных процессов и явлений и многое другое.

В примерах работаем с базой данных "Театр". Таблица Play содержит данные о постановках. Таблица Team — о ролях актёров. Таблица Actor — об актёрах. Таблица Director — о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).

Это уже база с большим объёмом данных по сравнению с примерами ко многим другим темам нашего курса. Поэтому не будем приводить строки данных таблиц и таблицы результатов запросов. Однако это будет компенсировано подробным разбором логики построения запросов, которые, надо признать, имеют достаточно высокую сложность.

Пример 1. Сформировать список актеров старше 70 лет. Пишем следующий запрос:

В этом запросе вычисляется разница между текущей датой CURDATE() и датой рождения актёра BirthDate, содержащейся в таблице ACTOR. Для вычисления разницы применена функция TIMESTAMPDIFF(). Ключевое слово YEAR — задаёт единицу измерения — в годах интервала между датами. Вычисленное значение и результат его сравнения с числом 70 вполне пригодны в качестве условия выборки в секции WHERE. Следует учесть, что функция TIMESTAMPDIFF() существует лишь в MySQL. В других диалектах SQL для этого есть функция DATEDIFF, а для задания единицы измерения применяются различные ключевые слова в различных вариантах написания.

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

Пример 2. Вывести список актеров, которые не задействованы в новых постановках (в постановках последних 3 лет). Использовать CURDATE(), NOT IN. Запрос будет следующим:

В этом запросе разница между текущей датой CURDATE() и датой премьеры постановки PremiereDate из таблицы Play вычисляется как имя столбца в результирующей таблице. Поскольку эти даты имеют один и тот же формат, для вычисления разницы достаточно использовать оператор "минус". Разница вычислена. Но из таблицы Play невозможно напрямую "достучаться" до таблицы Actor, содержащей данные об актёрах. Поэтому используем соединение (JOIN) этой таблицы с таблицей Team, которая уже связана с таблицей Actor при помощи ключа Actor_ID. Соединение таблиц Team и Actor — второе в этой цепочке из трёх таблиц.

Составить SQL запросы с текущей датой самостоятельно, а затем посмотреть решения

Пример 4. Определить самого востребованного актера за последние 5 лет. Оператор JOIN использовать 2 раза. Использовать CURDATE(), LIMIT 1.

Пример 5. Определить спектакли, в которых средний возраст актеров от 20 до 30 (использовать BETWEEN, GROUP BY, AVG).

Функции, возвращающие текущие дату, время, дату и время

CURDATE(), CURRENT_DATE(), CURRENT_DATE — возвращают текущую дату в формате ‘YYYY-MM-DD’ или YYYYDDMM в зависимости от того, вызывается функция в текстовом или числовом контексте.

CURTIME(), CURRENT_TIME(), CURRENT_TIME — возвращают текущее время суток в формате ‘hh-mm-ss’ или hhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте.

NOW() — возвращает текущие дату и время формате ‘YYYY-MM-DD hh:mm:ss’ или YYYYDDMMhhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте.

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

TIMEDIFF(param1, param2) — возвращает разницу между значениями времени, заданными параметрами param1 и param2.

DATEDIFF(param1, param2) — возвращает разницу между датами param1 и param2. Значения param1 и param2 могут иметь типы DATE или DATETIME, а при вычислении разницы используется лишь часть DATE.

Читайте также:  Как настроить телефон в качестве модема

PERIOD_DIFF(param1, param2) — возвращает разницу в месяцах между датами param1 и param2. Значения param1 и param2 могут быть представлены в числовом формате YYYYMM или YYMM.

TIMESTAMPDIFF(interval, param1, param2) — возвращает разницу между значениями датами param1 и param2. Значения param1 и param2 могут быть представлены в форматах ‘YYYY-MM-DD’ или ‘YYYY-MM-DD hh:mm:ss’. Единица измерения разницы задаётся параметром interval. Он может принимать значения FRAC_SECOND (микросекунды), SECOND (секунды), MINUTE (минуты), HOUR (часы), DAY (дни), WEEK (недели), MONTH (месяцы), QUARTER (кварталы), YEAR (годы).

Функции для добавления (или вычитания) некоторого значения к моменту

ADDDATE(date, INTERVAL value) — возвращает дату, к которой прибавлено значение value. Ключевое слово INTERVAL обязательно следует в запросе, после него указывается значение value, а затем единицы измерения прибавляемого значения. Ими могут быть SECOND (секунды), MINUTE (минуты), HOUR (часы), MINUTE_SECOND (минуты и секунды), HOUR_MINUTE (часы и минуты), DAY_SECOND (дни, часы минуты и секунды), DAY_MINUTE (дни, часы и минуты), DAY_HOUR (дни и часы), YEAR_MONTH (годы и месяцы).

SUBDATE(date, INTERVAL value) — вычитает из величины даты date произвольный временной интервал и возвращает результат. Ключевое слово INTERVAL обязательно следует в запросе, после него указывается значение value, а затем единицы измерения вычитаемого значения. Возможные единицы измерения — те же, что и для функции ADDDATE().

SUBTIME(datetime, time) — вычитает из величины времени datetime вида ‘YYYY-MM-DD hh:mm:ss’ произвольно заданное значение времени time и возвращает результат.

PERIOD_ADD(period, N) — добавляет N месяцев к значению даты period. Значение period должно быть представлено в числовом формате ‘YYYYMM’ или ‘YYMM’.

TIMESTAMPADD(interval, param1, param2) — прибавляет к дате и времени суток param2 в полном или кратком формате временной интервал param1, единицы измерения которого заданы параметром interval. Возможные единицы измерения — те же, что и для функции TIMESTAMPDIFF().

Функции, характеризующие момент (значение аргумента)

DATE(datetime) — извлекает из значения даты и времени суток в формате DATETIME (‘YYYY-MM-DD hh:mm:ss’) только дату, отсекая часы, минуты и секунды.

TIME(datetime) — извлекает из значения даты и времени суток в формате DATETIME (‘YYYY-MM-DD hh:mm:ss’) только время суток, отсекая дату.

TIMESTAMP(param) — принимает в качестве аргумента дату и время суток в полном или кратком формате и возвращает полный вариант в формате DATETIME (‘YYYY-MM-DD hh:mm:ss’).

DAY(date), DAYOFMONTH(date) — принимают в качестве аргумента дату, и возвращают порядковый номер дня в месяце (от 1 до 31).

DAYNAME(date) — принимает в качестве аргумента дату, и возвращает день недели в виде полного слова на английском языке.

DAYOFWEEK(date) — принимает в качестве аргумента дату, и возвращает порядкоый номер дня недели от 1 (воскресенье) до 7 (суббота).

WEEKDAY(date) — принимает в качестве аргумента дату, и возвращает порядкоый номер дня недели от 0 (понедельник) до 6 (воскресенье).

WEEK(date) — принимает в качестве аргумента дату, и возвращает номер недели в году для этой даты от 0 до 53.

WEEKOFYEAR(datetime) — возвращает порядковый номер недели в году для даты datetime от 1 до 53.

MONTH(datetime) — возвращает числовое значение месяца года от 1 до 12 для даты datetime.

MONTHNAME(datetime) — возвращает строку с названием месяца для даты datetime.

QUARTER(datetime) — возвращает значение квартала от 1 до 4 для даты datetime, которая может быть передана в формате ‘YYYY-MM-DD’ или ‘YYYY-MM-DD hh:mm:ss’.

YEAR(datetime) — возвращает год от 1000 до 9999 для даты datetime.

DAYOFYEAR(date) — возвращает порядковый номер дня в году от 1 до 366 для даты date.

HOUR(datetime) — возвращает значение часа от 0 до 23 для времени datetime.

MINUTE(datetime) — возвращает значение минут от 0 до 59 для времени datetime.

SECOND(time) — возвращает количество секунд для времени суток time, которое задаётся либо в виде строки ‘hh:mm:ss’, либо числа hhmmss.

EXTRACT(type FROM datetime) — принимает дату и время суток datetime и возвращает часть, определяемую параметром type. Значениями параметра могут быть YEAR, MONTH, DAY, HOUR, MINUTE, SECOND.

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

TO_DAYS(date) — принимает дату date в кратком ‘YYYY-MM-DD’ или полном формате ‘YYYY-MM-DD hh:mm:ss’ и возвращает количество дней, прошедших с нулевого года.

FROM_DAYS(N) — принимает количество дней N, прошедших с нулевого года, и возвращает дату в формате ‘YYYY-MM-DD’.

UNIX_TIMESTAMP(), UNIX_TIMESTAMP(datetime) — если параметр не указан, то возвращает количество секунд, прошедших с 00:00 1 января 1970 года. Если параметр datetime указан (в кратком ‘YYYY-MM-DD’ или полном формате ‘YYYY-MM-DD hh:mm:ss’), то возвращает разницу в секундах между 00:00 1 января 1970 года и датой datetime.

FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp, format) — принимает количество секунд, прошедших с 00:00 1 января 1970 года и возвращает дату и время суток в виде строки ‘YYYY-MM-DD hh:mm:ss’ или в виде числа YYYYDDMMhhmmss в зависимости от того, вызвана функция в строковом или числовом контексте.

TIME_TO_SEC(time) — принимает время суток time в формате ‘hh:mm:ss’ и возвращает количество секунд, прошедших с начала суток.

SEC_TO_TIME(seconds) — принимает количество секунд seconds, прошедших с начала суток и возвращает время в формате ‘hh:mm:ss’ или hhmmss в зависимости от того, вызвана функция в строковом или числовом контексте.

MAKEDATE(year, dayofyear) — принимает год year, номер дня в году dayofyear и возвращает дату в формате ‘YYYY-MM-DD’.

Читайте также:  Как приблизить часть видео

MAKETIME(hour, minute, second) — принимает часы hour, минуты minute и секунды second и возвращает время суток в формате ‘hh:mm:ss’.

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Возвращает текущую системную метку времени базы данных в виде значения datetime без смещения часового пояса базы данных. Returns the current database system timestamp as a datetime value without the database time zone offset. Это значение наследуется от операционной системы компьютера, на котором работает экземпляр SQL Server SQL Server . This value is derived from the operating system of the computer on which the instance of SQL Server SQL Server is running.

SYSDATETIME и SYSUTCDATETIME имеют большую точность в долях секунды, чем GETDATE и GETUTCDATE. SYSDATETIME and SYSUTCDATETIME have more fractional seconds precision than GETDATE and GETUTCDATE. SYSDATETIMEOFFSET включает смещение часового пояса, заданное в системе. SYSDATETIMEOFFSET includes the system time zone offset. SYSDATETIME, SYSUTCDATETIME и SYSDATETIMEOFFSET можно присваивать переменным любого типа даты и времени. SYSDATETIME, SYSUTCDATETIME, and SYSDATETIMEOFFSET can be assigned to a variable of any of the date and time types.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL). For an overview of all Transact-SQL Transact-SQL date and time data types and functions, see Date and Time Data Types and Functions (Transact-SQL).

Синтаксические обозначения в Transact-SQL Transact-SQL Syntax Conventions

Синтаксис Syntax

Тип возвращаемых данных Return Type

datetime datetime

Remarks Remarks

Функция GETDATE может использоваться в инструкциях Transact-SQL Transact-SQL везде, где допустимо использование выражения datetime. Transact-SQL Transact-SQL statements can refer to GETDATE anywhere they can refer to a datetime expression.

GETDATE является недетерминированной функцией. GETDATE is a nondeterministic function. Невозможно проиндексировать представления и выражения, ссылающиеся на эту функцию в столбце. Views and expressions that reference this function in a column cannot be indexed.

Использование SWITCHOFFSET с функцией GETDATE() может вызвать замедление выполнения запроса, поскольку оптимизатор запросов не может получить точные оценки количества элементов для значения GETDATE. Using SWITCHOFFSET with the function GETDATE() can cause the query to run slowly because the query optimizer is unable to obtain accurate cardinality estimates for the GETDATE value. Рекомендуется заранее вычислить значение GETDATE, а затем указать это значение в запросе, как показано в следующем примере. We recommend that you precompute the GETDATE value and then specify that value in the query as shown in the following example. Кроме того, с помощью указания запроса OPTION (RECOMPILE) можно вынудить оптимизатор запросов повторно компилировать план запроса при каждом выполнении одного и того же запроса. In addition, use the OPTION (RECOMPILE) query hint to force the query optimizer to recompile a query plan the next time the same query is executed. В этом случае оптимизатор будет иметь точные оценки количества элементов для GETDATE(), что позволит ему сформировать более эффективный план запроса. The optimizer will then have accurate cardinality estimates for GETDATE() and will produce a more efficient query plan.

Примеры Examples

В следующих примерах с помощью шести системных функций SQL Server SQL Server , которые возвращают текущую дату и время, происходит возврат даты, времени или и того и другого. The following examples use the six SQL Server SQL Server system functions that return current date and time to return the date, time, or both. Значения возвращаются последовательно и поэтому могут различаться на доли секунды. The values are returned in series; therefore, their fractional seconds might be different.

A. A. Получение текущей системной даты и времени Getting the current system date and time

Ниже приводится результирующий набор. Here is the result set.

Б. B. Получение текущей системной даты Getting the current system date

Ниже приводится результирующий набор. Here is the result set.

В. C. Получение текущего системного времени Getting the current system time

Ниже приводится результирующий набор. Here is the result set.

Примеры: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) и Параллельное хранилище данных Parallel Data Warehouse Examples: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) and Параллельное хранилище данных Parallel Data Warehouse

В приведенных ниже примерах с помощью трех системных функций SQL Server SQL Server , которые возвращают текущую дату и время, происходит получение даты, времени или и того и другого. The following examples use the three SQL Server SQL Server system functions that return current date and time to return the date, time, or both. Значения возвращаются последовательно и поэтому могут различаться на доли секунды. The values are returned in series; therefore, their fractional seconds might be different.

Adblock
detector