Как изменить формат даты в sql
Для изменения формата даты в SQL, можно использовать функцию преобразования даты — CONVERT() или функцию форматирования даты — FORMAT() . Обе функции могут быть использованы в различных СУБД SQL (например, в MySQL, PostgreSQL, SQL Server).
Вот пример использования этих функций:
SELECT CONVERT(varchar, GETDATE(), 103) AS 'DD/MM/YYYY'
В этом примере мы используем функцию CONVERT() , чтобы преобразовать текущую дату (используя функцию GETDATE() ) в формат даты ‘DD/MM/YYYY’. Цифры 103 являются кодом формата даты.
SELECT FORMAT(GETDATE(), 'dd/MM/yyyy') AS 'DD/MM/YYYY'
В этом примере мы используем функцию FORMAT() , чтобы отформатировать текущую дату (используя функцию GETDATE() ) в формат ‘dd/MM/yyyy’.
Обратите внимание, что формат даты может отличаться в зависимости от используемой СУБД SQL.
Функция DATEADD стр. 1
Функция DATEADD (datepart, number, date) возвращает значение типа datetime, которое получается добавлением к дате date количества интервалов типа datepart, равного number (целое число).
Например, мы можем к заданной дате добавить любое число лет, дней, часов, минут и т. д.
Допустимые значения аргумента datepart приведены ниже в таблице и взяты из электронной документации к Cистема управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Язык структурированных запросов) — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных. SQL Server — Books On Line (BOL).
Пусть сегодня 28.10.2005, и мы хотим узнать, какой день будет через неделю. Мы можем написать:

Консоль
Выполнить

Консоль
Выполнить
В результате получим одно и то же значение; что-то типа 2005-11-04 00:11:28.683.
Однако мы не можем в этом случае написать:

Консоль
Выполнить
и не потому, что четверть месяца не равна в точности неделе, а потому, что дробная часть значения аргумента datepart отбрасывается, и мы получим 0 вместо одной четвертой и, как следствие, текущий день.

Кроме того, мы можем использовать вместо CURRENT_TIMESTAMP функцию T-SQL (Transact-SQL) — процедурное расширение языка SQL, используемое для программирования на стороне сервера в Microsoft SQL Server и Sybase ASE. T-SQL GETDATE () с тем же самым эффектом. Наличие двух идентичных функций поддерживается, видимо, в ожидании последующего развития стандарта.
Определить, какой будет день через неделю после последнего полета.
Примечание:
В примерах данной главы используется база данных «Аэрофлот». Описание этой схемы и всех остальных схем, используемых в настоящее время на сайте для решения задач, можно найти в Примечании 1.

Консоль
Выполнить
Типы данных и функции даты и времени (Transact-SQL)
В разделах этой статьи представлен обзор всех типов данных и функций даты и времени Transact-SQL.
- Типы данных даты и времени
- Функции даты и времени
- Функции, возвращающие значения системной даты и времени
- Функции, возвращающие компоненты даты и времени
- Функции, возвращающие значения даты и времени из их компонентов
- Функции, возвращающие значения разности даты и времени
- Функции, изменяющие значения даты и времени
- Функции, устанавливающие или возвращающие функции формата сеанса
- Функции, проверяющие значения даты и времени
Типы данных даты и времени
Типы данных даты и времени Transact-SQL перечислены в следующей таблице:
Тип данных Формат Диапазон Точность Объем памяти (в байтах) Определяемая пользователем точность в долях секунды Смещение часового пояса time чч:мм:сс[.ннннннн] От 00:00:00.0000000 до 23:59:59.9999999 100 наносекунд от 3 до 5 Да Нет date ГГГГ-ММ-ДД От 0001-01-01 до 31.12.99 1 день 3 Нет Нет smalldatetime ГГГГ-ММ-ДД чч:мм:сс От 01.01.1900 до 06.06.2079 1 минута 4 нет Нет datetime ГГГГ-ММ-ДД чч:мм:сс[.ннн] От 01.01.1753 до 31.12.9999 0,00333 секунды 8 Нет Нет datetime2 ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 100 наносекунд От 6 до 8 Да Нет datetimeoffset ГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:мм От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 (время в формате UTC) 100 наносекунд От 8 до 10 Да Да Тип данных Transact-SQL rowversion не относится к типам данных даты и времени. Тип данных timestamp является устаревшим синонимом rowversion.
Функции даты и времени
В следующих таблицах приводятся функции даты и времени Transact-SQL. Дополнительные сведения о детерминизме см. в статье Детерминированные и недетерминированные функции.
Функции, возвращающие значения системной даты и времени
Transact-SQL наследует все значения системной даты и времени от операционной системы компьютера, на котором работает экземпляр SQL Server.
Высокоточные функции системной даты и времени
Начиная с SQL Server 2008 (10.0.x) ядро СУБД получает значения даты и времени с помощью API Windows GetSystemTimeAsFileTime(). Точность зависит от физического оборудования и версии Windows, в которой запущен экземпляр SQL Server. Точность возвращаемых значений этого API-интерфейса задана равной 100 нс. Точность может быть определена с помощью метода GetSystemTimeAdjustment() API-интерфейса Windows.
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм SYSDATETIME SYSDATETIME ( ) Возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime2(7) Недетерминированная SYSDATETIMEOFFSET SYSDATETIMEOFFSET ( ) Возвращает значение типа datetimeoffset(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение содержит смещение часового пояса. datetimeoffset(7) Недетерминированная SYSUTCDATETIME SYSUTCDATETIME ( ) Возвращает значение типа datetime2(7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в формате UTC. datetime2(7) Недетерминированная Функции системной даты и времени меньшей точности
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм CURRENT_TIMESTAMP CURRENT_TIMESTAMP Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime Недетерминированная GETDATE GETDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Возвращаемое значение не содержит смещение часового пояса. datetime Недетерминированная GETUTCDATE GETUTCDATE ( ) Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Функция возвращает значения даты и времени в формате UTC. datetime Недетерминированная Функции, возвращающие компоненты даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATE_BUCKET DATE_BUCKET ( datepart, number, date, origin ) Возвращает значение даты и времени, соответствующее началу каждого контейнера даты и времени, из временной метки, определенной параметром origin или исходным значением по умолчанию 1900-01-01 00:00:00.000 , если параметр orgin не указан. Тип возвращаемого значения зависит от типа аргумента, переданного в параметре date. Недетерминированная DATENAME DATENAME ( datepart, date ) Возвращает строку символов, представляющую указанную часть datepart заданного типа date. nvarchar Недетерминированная DATEPART DATEPART ( datepart, date ) Возвращает целое число, представляющее указанную часть datepart заданного типа date. int Недетерминированная DATETRUNC DATETRUNC ( datepart, date ) Эта функция возвращает входную дату date, усеченную до указанной части datepart. Тип возвращаемого значения зависит от типа аргумента, переданного в параметре date. Недетерминированная DAY DAY ( date ) Возвращает целое число, представляющее часть дня указанного типа date. int Детерминированный MONTH MONTH ( date ) Возвращает целое число, представляющее часть месяца указанного типа date. int Детерминированный YEAR YEAR ( date ) Возвращает целое число, представляющее часть года указанного типа date. int Детерминированный Функции, возвращающие значения даты и времени из их компонентов
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATEFROMPARTS DATEFROMPARTS ( year, month, day ) Возвращает значение date, соответствующее указанному числу, месяцу и году. date Детерминированный DATETIME2FROMPARTS DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision) Возвращает значение datetime2, соответствующее указанной дате и времени с заданной точностью. datetime2(precision) Детерминированный DATETIMEFROMPARTS DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds) Возвращает значение datetime, соответствующее указанной дате и времени. datetime Детерминированный DATETIMEOFFSETFROMPARTS DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision) Возвращает значение datetimeoffset для указанных даты и времени с указанными смещением и точностью. datetimeoffset(precision) Детерминированный SMALLDATETIMEFROMPARTS SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute ) Возвращает значение smalldatetime, соответствующее указанной дате и времени. smalldatetime Детерминированный TIMEFROMPARTS TIMEFROMPARTS ( hour, minute, seconds, fractions, precision ) Возвращает значение time, соответствующее указанному времени с заданной точностью. time(precision) Детерминированный Функции, возвращающие значения разности даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATEDIFF DATEDIFF ( datepart, startdate, enddate ) Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. int Детерминированный DATEDIFF_BIG DATEDIFF_BIG ( datepart, startdate, enddate ) Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. bigint Детерминированный Функции, изменяющие значения даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм DATEADD DATEADD (datepart, number, date ) Возвращает новое значение datetime, добавляя интервал к указанной части datepart заданной даты date. Тип данных аргумента date Детерминированный EOMONTH EOMONTH ( start_date [, month_to_add ] ) Возвращает последний день месяца, содержащего указанную дату, с необязательным смещением. Тип возвращаемого значения — это тип аргумента start_date или тип данных date. Детерминированный SWITCHOFFSET SWITCHOFFSET (DATETIMEOFFSET, time_zone) Функция SWITCHOFFSET изменяет смещение часового пояса для значения DATETIMEOFFSET и сохраняет значение UTC. Значение datetimeoffset с точностью в долях секунд, заданной в аргументе DATETIMEOFFSET Детерминированный TODATETIMEOFFSET TODATETIMEOFFSET (expression, time_zone) TODATETIMEOFFSET преобразует значение типа datetime2 в значение типа datetimeoffset. Функция TODATETIMEOFFSET преобразует значение datetime2 в местное время для указанного time_zone. Значение datetimeoffset с точностью в долях секунд, заданной в аргументе datetime Детерминированный Функции, устанавливающие или возвращающие функции формата сеанса
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм @@DATEFIRST @@DATEFIRST Возвращает текущее значение параметра SET DATEFIRST для сеанса. tinyint Недетерминированная SET DATEFIRST SET DATEFIRST < number | @number_var > Устанавливает первый день недели в виде числа от 1 до 7. Неприменимо Неприменимо SET DATEFORMAT SET DATEFORMAT < format | @format_var > Задает порядок составляющих даты (месяц/день/год) для ввода данных типа datetime или smalldatetime. Неприменимо Неприменимо @@LANGUAGE @@LANGUAGE Возвращает название использующегося в настоящий момент языка. @@LANGUAGE не является функцией даты или времени. Однако на данные, выводимые функциями даты, могут повлиять настройки языка. Неприменимо Неприменимо SET LANGUAGE SET LANGUAGE < [ N ] ‘language‘ | @language_var > Устанавливает языковую среду сеанса и системных сообщений. SET LANGUAGE не является функцией даты или времени. Однако на данные, выводимые функциями даты, влияет параметр языка. Неприменимо Неприменимо sp_helplanguage sp_helplanguage [ [ = ] ‘language‘ ] Возвращает сведения о формате даты всех поддерживаемых языков. sp_helplanguage не является хранимой процедурой даты или времени. Однако на данные, выводимые функциями даты, влияет параметр языка. Неприменимо Неприменимо Функции, проверяющие значения даты и времени
Функция Синтаксис Возвращаемое значение Тип возвращаемых данных Детерминизм ISDATE ISDATE ( expression ) Определяет, является ли входное выражение типа datetime или smalldatetime допустимым значением даты или времени. int Функция ISDATE детерминирована, только если используется совместно с функцией CONVERT и если заданный параметр стиля CONVERT не равен 0, 100, 9 или 109. Дата и время — см. также
Статья Описание FORMAT Возвращает значение в указанных формате и культуре (не обязательно). Для выполнения форматирования значения даты, времени и чисел с учетом локали в виде строк используется функция FORMAT. Функции CAST и CONVERT (Transact-SQL) Предоставляет сведения о преобразовании значений даты и времени в строковые литералы и обратно, а также в другие форматы даты и времени. Написание инструкций Transact-SQL, адаптированных к международному использованию Предоставляет рекомендации относительно переносимости баз данных и приложений баз данных, использующих инструкции Transact-SQL, с одного языка на другой или в многоязычную среду. Скалярные функции ODBC (Transact-SQL) Предоставляет сведения о скалярных функциях ODBC, которые могут использоваться в инструкциях Transact-SQL. К ним относятся функции даты и времени ODBC. AT TIME ZONE (Transact-SQL) Обеспечивает преобразование часовых поясов. См. также
- Функции
- Типы данных (Transact-SQL)
Обратная связь
Были ли сведения на этой странице полезными?
SQL-Ex blog

Команды SQL для получения текущих даты и времени в SQL Server
Добавил Sergey Moiseenko on Суббота, 28 января. 2023
В приложениях баз данных текущие дата и время используются разными способами. Будь это создание журналов аудита, записи продаж, триггеры базы данных или, поскольку вам просто потребовалось узнать текущие дату и время, знание различных способов их получения может быть очень полезным. Здесь обсуждаются различные функции текущей даты в T-SQL, когда и как их следует использовать.
Рассматриваются команды (функции) SQL даты/времени для SQL Server, Azure SQL Database, Managed instance (MI) и Azure Synapse Analytics.
- GETDATE()
- CURRENT_TIMESTAMP
- SYSDATETIME
- GETUTCDATE
- SYSUTCDATETIME
- SYSDATETIMEOFFSET
Функция GETDATE() в SQL Server
Команда (функция) GETDATE() возвращает системный штамп времени без указания часового пояса. Получаемое значение соответствует часовому поясу данного компьютера (сервера). Возвращаемое значение имеет тип DateTime.
Однако выполнение функции DateTime() в Azure SQL Database и Azure Synapse Analytics возвращает UTC (универсальную координату времени).

Вы можете прибавлять и отнимать даты из функций DateTime(). Например, DateTime()-1 возвращает штамп времени на вчера, а DateTime()+1 — на завтра.
SELECT getdate()-1 AS Yesterday,
getdate() AS Today,
getdate()+1 AS Tomorrow

Если нам потребуется интерпретация возвращаемого значения вне часового пояса UTC для Azure SQL Database или SQL Server, используйте функцию AT TIME ZONE.
Предположим, например, что мы хотим получить значение часового пояса индийского стандартного времени (IST) из функции getdate(). Следующий скрипт определяет текущий часовой пояс как UTC, а затем преобразует его к желаемому значению часового пояса.
SELECT GETDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'India Standard Time'

Запрос к системной таблице, приведенный ниже, дает список поддерживаемых в Azure часовых поясов.
SELECT name AS TimeZone, Current_UTC_offset FROM sys.time_zone_info

CURRENT_TIMESTAMP
Команда (функция) SQL возвращает системный штамп времени подобно функции GETDATE(). Это эквивалент ANSI функции GETDATE() и может использоваться взаимозаменяемо в операторах T-SQL.

Как показано ниже, мы можем заменить GETDATE() на CURRENT_TIMESTAMP с функцией AT TIME ZONE для получения желаемого значения часового пояса.
SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC' AT TIME ZONE 'India Standard Time'

SYSDATETIME()
Функция SYSDATETIME() возвращает более точное значение в дробной части секунды. Возвращаемое значение имеет тип datetime2 с точностью 7 десятичных знаков.

GETUTCDATE() и SYSUTCDATETIME()
Предположим вам требуется получить штамп времени UTC, несмотря на часовой пояс вашей системы. В этом случае вы можете использовать команды (функцию) SQL GETUTCDATE(), как показано ниже:

- Тип данных возвращаемого значения: Datetime
- Включается смещение часового пояса: Нет
SYSUTCDATE() также возвращает значение зоны UTC с более высокой точностью. Тип возвращаемого значения — DateTime2 с точностью 7.
SELECT SYSUTCDATETIME()

SYSDATETIMEOFFSET()
Команда (функция) SYSDATETIMEOFFSET() возвращает значение на основе наличной операционной системы и часового пояса. Оно включает более высокую точность наряду со смещением часового пояса.
Как показано ниже, оно включает смещение часового пояса +00:00, которое означает, что это UTC.

Запрос для сравнения вывода различных функций даты/времени
Следующий запрос комбинирует все функции даты/времени SQL Server в операторе SELECT. Вы можете выполнить нижеприведенный запрос, чтобы сравнить возвращаемые значения. Он возвращает значение из GETDATE(), CURRENT_TIMESTAMP, SYSDATETIME, SYSDATETIMEOFFSET, GETUTCDATE, SYSUTCDATETIME:
SELECT
GETDATE() AS [GETDATE()]
,CURRENT_TIMESTAMP AS [CURRENT_TIMESTAMP]
,SYSDATETIME() AS [SYSDATETIME()]
,SYSDATETIMEOFFSET() AS [SYSDATETIMEOFFSET()]
,GETUTCDATE() AS [GETUTCDATE()]
,SYSUTCDATETIME() AS [SYSUTCDATETIME()] ;
- GETDATE(): 2021-12-25 02:50:40.767
- CURRENT_TIMESTAMP: 2021-12-25 02:50:40.767
- SYSDATETIME():2021-12-25 02:50:40.7500000
- SYSDATETIMEOFFSET(): 2021-12-25 02:50:40.7500000 +00:00
- GETUTCDATE(): 2021-12-25 02:50:40.753
- SYSUTCDATETIME: 2021-12-25 02:50:40.7534774
SELECT
CONVERT (date,GETDATE()) AS [GETDATE()]
,CONVERT (date,CURRENT_TIMESTAMP) AS [CURRENT_TIMESTAMP]
,CONVERT (date,SYSDATETIME()) AS [SYSDATETIME()]
,CONVERT (date,SYSDATETIMEOFFSET()) AS [SYSDATETIMEOFFSET()]
,CONVERT (date,GETUTCDATE()) AS [GETUTCDATE()]
,CONVERT (date,SYSUTCDATETIME()) AS [SYSUTCDATETIME()] ;

Аналогично, как показано ниже, мы можем использовать аргумент time в функции CONVERT(), чтобы извлечь только время из результата.
SELECT
CONVERT (time,GETDATE()) AS [GETDATE()]
,CONVERT (time,CURRENT_TIMESTAMP) AS [CURRENT_TIMESTAMP]
,CONVERT (time,SYSDATETIME()) AS [SYSDATETIME()]
,CONVERT (time,SYSDATETIMEOFFSET()) AS [SYSDATETIMEOFFSET()]
,CONVERT (time,GETUTCDATE()) AS [GETUTCDATE()]
,CONVERT (time,SYSUTCDATETIME()) AS [SYSUTCDATETIME()] ;

Давайте рассмотрим несколько вариантов использования различных функций даты/времени в SQL Server и Azure SQL Database.
Следующий пример создает таблицу с именем [DemoSQLTable] и несколькими столбцами, имеющими значениями по умолчанию рассматриваемые функции – GETDATE(), CURRENT_TIMESTAMP и SYSDATETIME(). При вставке записи без явного указания значения оно берется из этих функций и сохраняется в соответствующих столбцах.
Create Table DemoSQLTable (
id int,
myGETDATE smalldatetime default GETDATE(),
myCurrentTimeStamp datetime default CURRENT_TIMESTAMP,
mySYSDATETIME datetime2 default SYSDATETIME()
);
GO
insert into DemoSQLTable (ID) values (1);
GO
Select * from DemoSQLTable;

Можем ли мы использовать функцию даты/времени в качестве параметра хранимой процедуры?
Часто требуются данные из таблиц, которые удовлетворяют диапазону дат или конкретной дате. Например, если записи о продажах заказчиков хранятся в таблице, нас может интересовать сделанные сегодня заказы или заказы за конкретный месяц или год.
Давайте создадим хранимую процедуру, использующую для демонстрации следующий запрос. Он определяет параметр @MyDateTime, имеющий тип данных DATETIME. Далее мы хотим фильтровать записи из таблицы [SalesLT].[SalesOrderDetail] на основе этого параметра.
CREATE PROC Test_DateTime_Proc
@MyDateTime DATETIME
as
SELECT [SalesOrderID]
,[SalesOrderDetailID]
,[OrderQty]
,[ProductID]
,[ModifiedDate]
FROM [SalesLT].[SalesOrderDetail]
WHERE [ModifiedDate]=@MyDateTime
Мы хотим использовать функции даты/времен для передачи значений параметру @MyDateTime. Если непосредственно передать функцию даты/времени для значения параметра, будет возникать ошибка, как показано ниже.
EXEC Test_DateTime_Proc @MyDateTime=getdate()

Чтобы выполнить хранимую процедуру с функцией даты/времени в качестве значения параметра, мы можем объявить переменную и сохранить вывод функции. Например, в T-SQL мы объявляем параметр @I и устанавливаем его значение с помощью функции GETDATE().
Declare @I datetime = getdate()
exec Test_DateTime_Proc @MyDateTime = @I;
GO
Скрипт отрабатывает без ошибок. В моем случае не находится строк, удовлетворяющих предикату, поэтому будет возвращено 0 строк.

Замечание. Функции даты/времени являются недетерминистическими в SQL Server. Следовательно, представление и выражение, которое ссылается на эту функцию в столбце, не может быть проиндексировано.
Обратные ссылки
Нет обратных ссылок
Комментарии
Показывать комментарии Как список | Древовидной структурой
Автор не разрешил комментировать эту запись