Как вывести текущую дату в sql

от admin

Как вывести текущую дату в sql

T-SQL предоставляет ряд функций для работы с датами и временем:

GETDATE : возвращает текущую локальную дату и время на основе системных часов в виде объекта datetime

GETUTCDATE : возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime

SYSDATETIME : возвращает текущую локальную дату и время на основе системных часов, но отличие от GETDATE состоит в том, что дата и время возвращаются в виде объекта datetime2

SYSUTCDATETIME : возвращает текущую локальную дату и время по гринвичу (UTC/GMT) в виде объекта datetime2

SYSDATETIMEOFFSET : возвращает объект datetimeoffset(7), который содержит дату и время относительно GMT

DAY : возвращает день даты, который передается в качестве параметра

MONTH : возвращает месяц даты

YEAR : возвращает год из даты

DATENAME : возвращает часть даты в виде строки. Параметр выбора части даты передается в качестве первого параметра, а сама дата передается в качестве второго параметра:

Для определения части даты можно использовать следующие параметры (в скобках указаны их сокращенные версии):

year (yy, yyyy) : год

quarter (qq, q) : квартал

month (mm, m) : месяц

dayofyear (dy, y) : день года

day (dd, d) : день месяца

week (wk, ww) : неделя

weekday (dw) : день недели

minute (mi, n) : минута

second (ss, s) : секунда

millisecond (ms) : миллисекунда

microsecond (mcs) : микросекунда

nanosecond (ns) : наносекунда

tzoffset (tz) : смешение в минутах относительно гринвича (для объекта datetimeoffset)

DATEPART : возвращает часть даты в виде числа. Параметр выбора части даты передается в качестве первого параметра (используются те же параметры, что и для DATENAME), а сама дата передается в качестве второго параметра:

DATEADD : возвращает дату, которая является результатом сложения числа к определенному компоненту даты. Первый параметр представляет компонент даты, описанный выше для функции DATENAME. Второй параметр — добавляемое количество. Третий параметр — сама дата, к которой надо сделать прибавление:

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

DATEDIFF : возвращает разницу между двумя датами. Первый параметр — компонент даты, который указывает, в каких единицах стоит измерять разницу. Второй и третий параметры — сравниваемые даты:

TODATETIMEOFFSET : возвращает значение datetimeoffset, которое является результатом сложения временного смещения с объектом datetime2

SWITCHOFFSET : возвращает значение datetimeoffset, которое является результатом сложения временного смещения с другим объектом datetimeoffset

EOMONTH : возвращает дату последнего дня для месяца, который используется в переданной в качестве параметра дате.

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

DATEFROMPARTS : по году, месяцу и дню создает дату

ISDATE : проверяет, является ли выражение датой. Если является, то возвращает 1, иначе возвращает 0.

В качестве примера использования функций можно привести создание таблицы заказов, которая содержит дату заказа:

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

How to Get Current Date in SQL Server

In this tutorial we will explore the different options for getting the current date from SQL Server and understand when to use one option over the other.

Solution

There are multiple ways to get the current date in SQL Servers using T-SQL and database system functions. In this tutorial I will show the different functions, discuss the differences between them, suggest where to use them as a SQL Reference Guide. I will then present several code usage examples.

Usage Options

SQL Server provides several different functions that return the current date time including: GETDATE(), SYSDATETIME(), and CURRENT_TIMESTAMP. The GETDATE() and CURRENT_TIMESTAMP functions are interchangeable and return a datetime data type.

The SYSDATETIME() function returns a datetime2 data type. Also SQL Server provides functions to return the current date time in Coordinated Universal Time or UTC which include the GETUTCDATE() and SYSUTCDATETIME() system date functions.

SQL Server provides an additional function, SYSDATETIMEOFFSET(), that returns a precise system datetime value with the SQL Server current time zone offset.

You can use SELECT CAST or SELECT CONVERT to change the data type being returned by these functions to Date, smalldatetime, datetime, datetime2, and character data types. Below shows the precision and range for each function.

Here is a comparison of the different options.

Function Data Type Precision Range
GETDATE() Datetime 19 positions minimum to 23 maximum; Rounded to increments of .000, .003, or .007 seconds 1753-01-01 through 9999-12-31; 00:00:00 through 23:59:59.997
CURRENT_TIMESTAMP Datetime 19 positions minimum to 23 maximum; Rounded to increments of .000, .003, or .007 seconds 1753-01-01 through 9999-12-31; 00:00:00 through 23:59:59.997
SYSDATETIME() Datetime2 27 maximum (YYYY-MM-DD hh:mm:ss.0000000); 100 nanoseconds 0001-01-01 through 9999-12-31; 00:00:00 through 23:59:59.9999999
GETUTCDATE() Datetime 19 positions minimum to 23 maximum; Rounded to increments of .000, .003, or .007 seconds 1753-01-01 through 9999-12-31; 00:00:00 through 23:59:59.997
SYSUTCDATETIME() Datetime2 27 maximum (YYYY-MM-DD hh:mm:ss.0000000); 100 nanoseconds 0001-01-01 through 9999-12-31; 00:00:00 through 23:59:59.9999999
SYSDATETIMEOFFSET() Datetimeoffset(n). n is the fractional seconds precision and can range from 0 to 7. hh:mm:ss[.nnnnnnn] YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm; Same as SYSDATETIME(): 2007-05-08 12:35:29.1234567 +12:15; hh range from 00 to 14 and mm ranging from 00 to 59 and -14:00 through +14:00

Why use one over the other?

The GETDATE() function is the most commonly used of the set of functions.

The CURRENT_TIMESTAMP function can be used anywhere that the GETDATE() function is used. It is the ANSI equivalent to the GETDATE() function. Both return the exact same results and are of the datetime data type.

The SYSDATETIME() function is rarely used and is of datatime2 data type which is more precise in fractions of a second. This would be used if higher precision is required.

If Coordinated Universal Time or UTC is required, either GETUTCDATE() or SYSUTCDATETIME() can be used, the latter is of higher precision if needed.

Last, to get the current date time in datetime2 precision and show the current time zone off set, use SYSDATETIMEOFFSET(). This function returns the results as data type Datetimeoffset(7).

Usage Example

Example SELECT statement calling each current date function.

Results: The first result shows the current local time of the server and the different precisions. The second result shows the current time with the time zone offset and UTC date times with different precisions. The actual results will vary based on your server time and time zone.

Solution – SQL Examples

Next, I will show many different usage examples of the current datetime functions. For some of the examples I will use Microsoft’s sample AdventureWorks database.

Example 1 – Use as a Parameter for a Script

In this example I will declare variables with different data types and set their values using different current datetime functions and then show their results.

Results: The scripting example showing results with different data types. For SYSDATETIMEOFFSET(), I specified 0 as the fractional seconds precision. Note that SYSDATETIMEOFFSET(0) includes my server local time zone offset.

result set

Example 2 – Use in a WHERE clause

This example will show the usage of the current datetime functions in Where clauses.

Results: Below shows one of a partial result set from the Where clause example. All 3 results in this case are the same.

result set

Example 3 – Use in a CASE statement

This example shows use of CURRENT_TIMESTAMP in a CASE statement.

Results: In the CASE statement results the converted smalldatetime date value rolls to the nearest minute showing 00 seconds.

result set

Example 4 – Use as Default in a Table Schema

In this example I will create a table with 3 date data type columns and will define each with a default value of each of the current date functions. I will insert 3 rows to the table and select the results.

Results: Table Default results showing the default current date columns being automatically populated. Also, here you can see the smalldatetime rounding to the nearest minute.

result set

Example 5 – Return Just the Date

This example declares variables with data type DATE and sets the values using different Current Date Time functions.

Results: Set current date time function to s DATE variable results.

result set

Example 5a – Use CAST to Return Just DATE

Another technique is to use CAST to return just the Date.

Results: Cast to DATE results.

result set

It is also possible to use SELECT CONVERT rather than CAST.

Example 6 – Use as a parameter for a stored procedure

When calling a stored procedure that takes a date parameter, unfortunately you cannot pass the current date functions directly. You can declare a variable of data type datetime and use the variable passed to the stored procedure parameter.

Example 6a – Create a Test Stored Procedure

First, we create a test stored procedure.

Example 6b – Attempt to pass the Function Directly

Next, we will attempt a SP call passing current timestamp directly to see the error raised.

Results: Bot h Stored Procedure calls error out. See both error below.

error message

Example 6c – Proper way to pass Current Date to a Stored Procedure

Now, I will show declaring a variable, setting the value to current timestamp and calling the SP passing the current timestamp variable.

Results: Stored Procedure successful results.

result set

Wrap Up

There are several ways to get Current Date and Time values in MSSQL with numerous SQL functions. Hopefully, this tutorial helped to identify the different options and highlighted differences between them and will aid in identifying when to use each one.

Что делают в SQL текущая дата и другие функции даты и времени

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

Читать:
Как присоединить нераспределенное пространство к диску c

Функция текущей даты 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).

В последующих параграфах приведено большинство функций даты и времени, используемых в СУБД MySQL. А примеры использования наиболее часто применимых в MS SQL Server функций DATEDIFF и DATEADD приведены соответственно на странице 2 и странице 3.

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

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

Работа с датой и временем в SQL может быть несколько сложной, поскольку форматы даты различаются. Например, в США используется формат даты ММ-ДД-ГГГГ , тогда как в Великобритании используется формат ДД-ММ-ГГГГ .

Более того, разные системы управления базами данных (СУБД) используют разные типы данных для хранения даты и времени. Вот краткий обзор того, как дата и время хранятся в различных СУБД.

Пример Формат SQL Server Oracle MySQL PostgreSQL
2022-05-12 11:35:26 ГГГГ-ММ-ДД чч:мм:сс DATETIME TIMESTAMP
2022-05-12 ГГГГ-ММ-ДД DATE DATE DATE
11:35:26 чч:мм:сс.мс TIME TIME TIME TIME
2022-04-22 11:35:26.43 ГГГГ-ММ-ДД чч:мм:сс.мс DATETIME TIMESTAMP
2022 ГГГГ YEAR
12-Янв-23 ДД-МЕС-ГГ TIMESTAMP

Примечание: В каждой СУБД доступно много функций даты. Однако в этой статье мы рассмотрим наиболее часто используемые функции даты в SQL Server.

Создание таблицы для хранения даты и времени

При создании таблицы следует указывать тип данных для столбца с датой. Например:

Похожие статьи