Разное

Ms sql функции работы с датами: Функции и типы данных даты и времени — SQL Server (Transact-SQL)

Содержание

Функции и типы данных даты и времени — SQL Server (Transact-SQL)



  • Чтение занимает 7 мин

В этой статье

Применимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsПрименимо к:Applies to: SQL ServerSQL Server (все поддерживаемые версии) SQL ServerSQL Server (all supported versions) База данных SQL AzureAzure SQL DatabaseБаза данных SQL AzureAzure SQL Database Управляемый экземпляр SQL AzureAzure SQL Managed InstanceУправляемый экземпляр SQL AzureAzure SQL Managed Instance Azure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse AnalyticsAzure Synapse Analytics

В разделах этой статьи представлен обзор всех типов данных и функций даты и времени Transact-SQLTransact-SQL. The sections in this topic cover all Transact-SQLTransact-SQL date and time data types and functions.

Типы данных даты и времениDate and Time data types

Типы данных даты и времени Transact-SQLTransact-SQL перечислены в следующей таблице:The Transact-SQLTransact-SQL date and time data types are listed in the following table:

Тип данныхData typeФорматFormatДиапазонRangeТочностьAccuracyОбъем памяти (в байтах)Storage size (bytes)Определяемая пользователем точность в долях секундыUser-defined fractional second precisionСмещение часового поясаTime zone offset
timetimeчч:мм:сс[.ннннннн]hh:mm:ss[.nnnnnnn]От 00:00:00.0000000 до 23:59:59.999999900:00:00.0000000 through 23:59:59.9999999100 наносекунд100 nanosecondsот 3 до 53 to 5ДаYesнетNo
datedateГГГГ-ММ-ДДYYYY-MM-DDОт 0001-01-01 до 31. 12.990001-01-01 through 9999-12-311 день1 day33нетNoнетNo
smalldatetimesmalldatetimeГГГГ-ММ-ДД чч:мм:ссYYYY-MM-DD hh:mm:ssОт 01.01.1900 до 06.06.20791900-01-01 through 2079-06-061 минута1 minute44нетNoнетNo
datetimedatetimeГГГГ-ММ-ДД чч:мм:сс[.ннн]YYYY-MM-DD hh:mm:ss[.nnn]От 01.01.1753 до 31.12.99991753-01-01 through 9999-12-310,00333 секунды0.00333 second88нетNoнетNo
datetime2datetime2ГГГГ-ММ-ДД чч:мм:сс[.ннннннн]YYYY-MM-DD hh:mm:ss[.nnnnnnn]От 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.99999990001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999100 наносекунд100 nanosecondsОт 6 до 86 to 8ДаYesнетNo
datetimeoffsetdatetimeoffsetГГГГ-ММ-ДД чч:мм:сс[.ннннннн] [+|-]чч:ммYYYY-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mmОт 0001-01-01 00:00:00.0000000 до 9999-12-31 23:59:59.9999999 (время в формате UTC)0001-01-01 00:00:00.0000000 through 9999-12-31 23:59:59.9999999 (in UTC)100 наносекунд100 nanosecondsОт 8 до 108 to 10ДаYesДаYes

Примечание

Тип данных Transact-SQLTransact-SQL rowversion не относится к типам данных даты и времени.The Transact-SQLTransact-SQL rowversion data type is not a date or time data type. Тип данных timestamp является устаревшим синонимом rowversion.timestamp is a deprecated synonym for rowversion.

Функции даты и времениDate and Time functions

В следующих таблицах приводятся функции даты и времени Transact-SQLTransact-SQL.The following tables list the Transact-SQLTransact-SQL date and time functions. Дополнительные сведения о детерминизме см. в статье Детерминированные и недетерминированные функции. See Deterministic and Nondeterministic Functions for more information about determinism.

Функции, возвращающие значения системной даты и времениFunction That Return System Date and Time Values

Transact-SQLTransact-SQL наследует все значения системной даты и времени от операционной системы компьютера, на котором работает экземпляр SQL ServerSQL Server.derives all system date and time values from the operating system of the computer on which the instance of SQL ServerSQL Server runs.

Высокоточные функции системной даты и времениHigher-Precision System Date and Time Functions

SQL Server 2019 (15.x)SQL Server 2019 (15.x) получает значения даты и времени с помощью функции GetSystemTimeAsFileTime() Windows API.derives the date and time values through use of the GetSystemTimeAsFileTime() Windows API. Точность зависит от физического оборудования и версии Windows, в которой запущен экземпляр SQL ServerSQL Server.The accuracy depends on the computer hardware and version of Windows on which the instance of SQL ServerSQL Server running. Точность возвращаемых значений этого API-интерфейса задана равной 100 нс.This API has a precision fixed at 100 nanoseconds. Точность может быть определена с помощью метода GetSystemTimeAdjustment() API-интерфейса Windows.Use the GetSystemTimeAdjustment() Windows API to determine the accuracy.

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
SYSDATETIMESYSDATETIMESYSDATETIME ()SYSDATETIME ()Возвращает значение типа datetime2(7) , которое содержит дату и время компьютера, на котором запущен экземпляр SQL ServerSQL Server.Returns a datetime2(7) value containing the date and time of the computer on which the instance of SQL ServerSQL Server runs. Возвращаемое значение не содержит смещение часового пояса.The returned value does not include the time zone offset.datetime2(7)datetime2(7)НедетерминированнаяNondeterministic
SYSDATETIMEOFFSETSYSDATETIMEOFFSETSYSDATETIMEOFFSET ( )SYSDATETIMEOFFSET ( )Возвращает значение типа datetimeoffset(7) , которое содержит дату и время компьютера, на котором запущен экземпляр SQL ServerSQL Server. Returns a datetimeoffset(7) value containing the date and time of the computer on which the instance of SQL ServerSQL Server runs. Возвращаемое значение содержит смещение часового пояса.The returned value includes the time zone offset.datetimeoffset(7)datetimeoffset(7)НедетерминированнаяNondeterministic
SYSUTCDATETIMESYSUTCDATETIMESYSUTCDATETIME ( )SYSUTCDATETIME ( )Возвращает значение типа datetime2(7) , которое содержит дату и время компьютера, на котором запущен экземпляр SQL ServerSQL Server.Returns a datetime2(7) value containing the date and time of the computer on which the instance of SQL ServerSQL Server is running. Функция возвращает значения даты и времени в формате UTC.The function returns the date and time values as UTC time (Coordinated Universal Time).datetime2(7)datetime2(7)НедетерминированнаяNondeterministic
Функции системной даты и времени меньшей точностиLower-Precision System Date and Time Functions
КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
CURRENT_TIMESTAMPCURRENT_TIMESTAMPCURRENT_TIMESTAMPCURRENT_TIMESTAMPВозвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL ServerSQL Server. Returns a datetime value containing the date and time of the computer on which the instance of SQL ServerSQL Server runs. Возвращаемое значение не содержит смещение часового пояса.The returned value does not include the time zone offset.datetimedatetimeНедетерминированнаяNondeterministic
GETDATEGETDATEGETDATE ( )GETDATE ( )Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL ServerSQL Server.Returns a datetime value containing the date and time of the computer on which the instance of SQL ServerSQL Server runs. Возвращаемое значение не содержит смещение часового пояса.The returned value does not include the time zone offset.datetimedatetimeНедетерминированнаяNondeterministic
GETUTCDATEGETUTCDATEGETUTCDATE ( )GETUTCDATE ( )Возвращает значение типа datetime, которое содержит дату и время компьютера, на котором запущен экземпляр SQL ServerSQL Server. Returns a datetime value containing the date and time of the computer on which the instance of SQL ServerSQL Server runs. Функция возвращает значения даты и времени в формате UTC.The function returns the date and time values as UTC time (Coordinated Universal Time).datetimedatetimeНедетерминированнаяNondeterministic

Функции, возвращающие компоненты даты и времениFunctions That Return Date and Time Parts

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
DATENAMEDATENAMEDATENAME ( datepart , date )DATENAME ( datepart , date )Возвращает строку символов, представляющую указанную часть datepart заданного типа date.Returns a character string representing the specified datepart of the specified date.nvarcharnvarcharНедетерминированнаяNondeterministic
DATEPARTDATEPARTDATEPART ( datepart , date )DATEPART ( datepart , date )Возвращает целое число, представляющее указанную часть datepart заданного типа date.Returns an integer representing the specified datepart of the specified date.intintНедетерминированнаяNondeterministic
DAYDAYDAY ( date )DAY ( date )Возвращает целое число, представляющее часть дня указанного типа date.Returns an integer representing the day part of the specified date.intintДетерминированноеDeterministic
MONTHMONTHMONTH ( date )MONTH ( date )Возвращает целое число, представляющее часть месяца указанного типа date. Returns an integer representing the month part of a specified date.intintДетерминированноеDeterministic
YEARYEARYEAR ( date )YEAR ( date )Возвращает целое число, представляющее часть года указанного типа date.Returns an integer representing the year part of a specified date.intintДетерминированноеDeterministic

Функции, возвращающие значения даты и времени из их компонентовFunctions That Return Date and Time Values from Their Parts

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
DATEFROMPARTSDATEFROMPARTSDATEFROMPARTS ( year, month, day )DATEFROMPARTS ( year, month, day )Возвращает значение date, соответствующее указанному числу, месяцу и году. Returns a date value for the specified year, month, and day.datedateДетерминированноеDeterministic
DATETIME2FROMPARTSDATETIME2FROMPARTSDATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision)DATETIME2FROMPARTS ( year, month, day, hour, minute, seconds, fractions, precision)Возвращает значение datetime2, соответствующее указанной дате и времени с заданной точностью.Returns a datetime2 value for the specified date and time, with the specified precision.datetime2( precision )datetime2( precision )ДетерминированноеDeterministic
DATETIMEFROMPARTSDATETIMEFROMPARTSDATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds)DATETIMEFROMPARTS ( year, month, day, hour, minute, seconds, milliseconds)Возвращает значение datetime, соответствующее указанной дате и времени. Returns a datetime value for the specified date and time.datetimedatetimeДетерминированноеDeterministic
DATETIMEOFFSETFROMPARTSDATETIMEOFFSETFROMPARTSDATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision)DATETIMEOFFSETFROMPARTS ( year, month, day, hour, minute, seconds, fractions, hour_offset, minute_offset, precision)Возвращает значение datetimeoffset для указанных даты и времени с указанными смещением и точностью.Returns a datetimeoffset value for the specified date and time, with the specified offsets and precision.datetimeoffset( precision )datetimeoffset( precision )ДетерминированноеDeterministic
SMALLDATETIMEFROMPARTSSMALLDATETIMEFROMPARTSSMALLDATETIMEFROMPARTS ( year, month, day, hour, minute )SMALLDATETIMEFROMPARTS ( year, month, day, hour, minute )Возвращает значение smalldatetime, соответствующее указанной дате и времени. Returns a smalldatetime value for the specified date and time.smalldatetimesmalldatetimeДетерминированноеDeterministic
TIMEFROMPARTSTIMEFROMPARTSTIMEFROMPARTS ( hour, minute, seconds, fractions, precision )TIMEFROMPARTS ( hour, minute, seconds, fractions, precision )Возвращает значение time, соответствующее указанному времени с заданной точностью.Returns a time value for the specified time, with the specified precision.time( precision )time( precision )ДетерминированноеDeterministic

Функции, возвращающие значения разности даты и времениFunctions That Return Date and Time Difference Values

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
DATEDIFFDATEDIFFDATEDIFF ( datepart , startdate , enddate )DATEDIFF ( datepart , startdate , enddate )Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами. Returns the number of date or time datepart boundaries, crossed between two specified dates.intintДетерминированноеDeterministic
DATEDIFF_BIGDATEDIFF_BIGDATEDIFF_BIG ( datepart , startdate , enddate )DATEDIFF_BIG ( datepart , startdate , enddate )Возвращает количество границ даты или времени datepart, пересекающихся между двумя указанными датами.Returns the number of date or time datepart boundaries, crossed between two specified dates.bigintbigintДетерминированноеDeterministic

Функции, изменяющие значения даты и времениFunctions That Modify Date and Time Values

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
DATEADDDATEADDDATEADD (datepart , number , date )DATEADD (datepart , number , date )Возвращает новое значение datetime, добавляя интервал к указанной части datepart заданной даты date. Returns a new datetime value by adding an interval to the specified datepart of the specified date.Тип данных аргумента dateThe data type of the date argumentДетерминированноеDeterministic
EOMONTHEOMONTHEOMONTH ( start_date [, month_to_add ] )EOMONTH ( start_date [, month_to_add ] )Возвращает последний день месяца, содержащего указанную дату, с необязательным смещением.Returns the last day of the month containing the specified date, with an optional offset.Тип возвращаемого значения — это тип аргумента start_date или тип данных date.Return type is the type of the start_date argument, or alternately, the date data type.ДетерминированноеDeterministic
SWITCHOFFSETSWITCHOFFSETSWITCHOFFSET (DATETIMEOFFSET, time_zone)SWITCHOFFSET (DATETIMEOFFSET , time_zone)Функция SWITCHOFFSET изменяет смещение часового пояса для значения DATETIMEOFFSET и сохраняет значение UTC. SWITCHOFFSET changes the time zone offset of a DATETIMEOFFSET value, and preserves the UTC value.Значение datetimeoffset с точностью в долях секунд, заданной в аргументе DATETIMEOFFSETdatetimeoffset with the fractional precision of the DATETIMEOFFSETДетерминированноеDeterministic
TODATETIMEOFFSETTODATETIMEOFFSETTODATETIMEOFFSET (expression , time_zone)TODATETIMEOFFSET (expression , time_zone)TODATETIMEOFFSET преобразует значение типа datetime2 в значение типа datetimeoffset.TODATETIMEOFFSET transforms a datetime2 value into a datetimeoffset value. Функция TODATETIMEOFFSET преобразует значение datetime2 в местное время для указанного time_zone.TODATETIMEOFFSET interprets the datetime2 value in local time, for the specified time_zone.Значение datetimeoffset с точностью в долях секунд, заданной в аргументе datetimedatetimeoffset with the fractional precision of the datetime argumentДетерминированноеDeterministic

Функции, устанавливающие или возвращающие функции формата сеансаFunctions That Set or Return Session Format Functions

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
@@DATEFIRST@@DATEFIRST@@DATEFIRST@@DATEFIRSTВозвращает текущее значение параметра SET DATEFIRST для сеанса. Returns the current value, for the session, of SET DATEFIRST.tinyinttinyintНедетерминированнаяNondeterministic
SET DATEFIRSTSET DATEFIRSTSET DATEFIRST { number | @ number_var }SET DATEFIRST { number | @number_var }Устанавливает первый день недели в виде числа от 1 до 7.Sets the first day of the week to a number from 1 through 7.НеприменимоNot applicableНеприменимоNot applicable
SET DATEFORMATSET DATEFORMATSET DATEFORMAT { format | @ format_var }SET DATEFORMAT { format | @format_var }Задает порядок составляющих даты (месяц/день/год) для ввода данных типа datetime или smalldatetime.Sets the order of the dateparts (month/day/year) for entering datetime or smalldatetime data.НеприменимоNot applicableНеприменимоNot applicable
@@LANGUAGE@@LANGUAGE@@LANGUAGE@@LANGUAGEВозвращает название использующегося в настоящий момент языка.Returns the name of the language in current used. Функция @@LANGUAGE не является функцией даты или времени.@@LANGUAGE is not a date or time function. Однако на данные, выводимые функциями даты, могут повлиять настройки языка.However, the language setting can affect the output of date functions.НеприменимоNot applicableНеприменимоNot applicable
SET LANGUAGESET LANGUAGESET LANGUAGE { [ N ] language | @ language_var }SET LANGUAGE { [ N ] language | @language_var }Устанавливает языковую среду сеанса и системных сообщений.Sets the language environment for the session and system messages. SET LANGUAGE не является функцией даты или времени.SET LANGUAGE is not a date or time function. Однако на данные, выводимые функциями даты, влияет параметр языка.However, the language setting affects the output of date functions.НеприменимоNot applicableНеприменимоNot applicable
sp_helplanguagesp_helplanguagesp_helplanguage [ [ @language = ] language ]sp_helplanguage [ [ @language = ] language ]Возвращает сведения о формате даты всех поддерживаемых языков.Returns information about date formats of all supported languages. sp_helplanguage не является хранимой процедурой даты или времени.sp_helplanguage is not a date or time stored procedure. Однако на данные, выводимые функциями даты, влияет параметр языка.However, the language setting affects the output of date functions.НеприменимоNot applicableНеприменимоNot applicable

Функции, проверяющие значения даты и времениFunctions That Validate Date and Time Values

КомпонентFunctionСинтаксисSyntaxВозвращаемое значениеReturn valueТип возвращаемых данныхReturn data typeДетерминизмDeterminism
ISDATEISDATEISDATE ( expression )ISDATE ( expression )Определяет, является ли входное выражение типа datetime или smalldatetime допустимым значением даты или времени.Determines whether a datetime or smalldatetime input expression has a valid date or time value.intintФункция ISDATE детерминирована, только если используется совместно с функцией CONVERT и если заданный параметр стиля CONVERT не равен 0, 100, 9 или 109.ISDATE is deterministic only used with the CONVERT function, when the CONVERT style parameter is specified, and when style is not equal to 0, 100, 9, or 109.
РазделTopicОписаниеDescription
FORMATFORMATВозвращает значение в указанных формате и культуре (не обязательно).Returns a value formatted with the specified format and optional culture. Для выполнения форматирования значения даты, времени и чисел с учетом локали в виде строк используется функция FORMAT.Use the FORMAT function for locale-aware formatting of date/time and number values as strings.
Функции CAST и CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)Предоставляет сведения о преобразовании значений даты и времени в строковые литералы и обратно, а также в другие форматы даты и времени.Provides information about the conversion of date and time values to and from string literals, and other date and time formats.
Написание инструкций Transact-SQL, адаптированных к международному использованиюWrite International Transact-SQL StatementsПредоставляет рекомендации относительно переносимости баз данных и приложений баз данных, использующих инструкции Transact-SQLTransact-SQL, с одного языка на другой или в многоязычную среду. Provides guidelines for portability of databases and database applications that use Transact-SQLTransact-SQL statements from one language to another, or that support multiple languages.
Скалярные функции ODBC (Transact-SQL)ODBC Scalar Functions (Transact-SQL)Предоставляет сведения о скалярных функциях ODBC, которые могут использоваться в инструкциях Transact-SQLTransact-SQL.Provides information about ODBC scalar functions available for use in Transact-SQLTransact-SQL statements. К ним относятся функции даты и времени ODBC.This includes ODBC date and time functions.
AT TIME ZONE (Transact-SQL)AT TIME ZONE (Transact-SQL)Обеспечивает преобразование часовых поясов.Provides time zone conversion.

См. также разделSee also

SQL. Как работать с датами

Как работать с датами

Используется формат dd.mm.yyyy (если используете тип Дата выбор)

В процедуры сохранения форм передавайте параметры Дата в виде строки.

Приведение строки к дате: try_convert(date, isnull(@fielddateBirth,’01.01.1980′), 104)

Приведение даты к строке: convert(nvarchar, isnull(dateBirth,’01.01.1900′), 104)

Если же используете тип HTML Date, то в этом случае используется вывод и сохранение следующим образом:

Приведение строки к дате: try_convert(date, isnull(@fielddateBirth,’1980-01-01′), 23)

Приведение даты к строке: convert(nvarchar, isnull(dateBirth,’1900-01-01′), 23)

Если необходимо в таблице редактировать Дату и время

Тип колонки — строка, тип редактирования колонки — Дата и время

GetItems:

  • поле @result.started типа nvarchar(64)
  • в insert приводим к строке format(started, ‘dd.MM.yyyy HH:mm’)

UpdateField:

  • set started = try_convert(datetime, isnull(@value,’01.01.2000 00:00′), 104)

Если необходимо в форме редактировать Дату

Тип колонки — HTML5

USE rudenas2x  
GRANT EXECUTE ON OBJECT::[dbo]. daily_GetExecutorsLoading
    TO falcon2;  
GO  

Date

GetItem:

convert(nvarchar,isnull(deadline,'1900-01-01'),23) as deadline

SaveItem:

deadline = try_convert(date,isnull(@fielddeadline,'1900-01-01'),23)

Форматы дат: https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

Работа с полями формы типа ДАТА

Если у вас поле Date HTML 5 (используется input[type=date]), то все даты должны приводиться к виду YYYY-MM-DD. Пример — convert(nvarchar(10), deadlineDate, 120). Это делается как для загрузки значения, так и для сохранения. 

Если у вас дата типа Date (используется Datepicker), то используется для ввода тот формат, что указан в GetLayout Info в SELECT 1 в параметре dateFormat. 

Обычно это dd.mm.yyyy. Пример convert(nvarchar(10), deadlineDate, 104)

Falcon Space — функциальная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space

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

Краткий
обзор основных функций
для работы с датой и временем представлен
в таблице.

Таблица 11.3.

DATEADD

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

DATEDIFF

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

DATENAME

выделяет из даты
указанную часть и возвращает ее в
символьном формате

DATEPART

выделяет из даты
указанную часть и возвращает ее в
числовом формате

DAY

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

GETDATE

возвращает текущее
системное время

ISDATE

проверяет правильность
выражения на соответствие одному из
возможных форматов ввода даты

MONTH

возвращает значение
месяца из указанной даты

YEAR

возвращает значение
года из указанной даты

SELECT
Year(Дата)
AS Год,
Month(Дата)

AS
Месяц,

Sum(Количество)
AS Общ_Количество

FROM
Сделка

GROUP
BY Year(Дата),
Month(Дата)

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

DECLARE
@d DATETIME

DECLARE
@y INT

SET
@d=’29.10.03’

SET
@y=DATEPART(yy,@d)

SELECT
@y

Вопрос 30 Хранимые процедуры в среде ms sql Server

При
работе с SQL Server пользователи
могут создавать собственные процедуры,
реализующие те или иные действия. Хранимые
процедуры
 являются
полноценными объектами базы
данных
,
а потому каждая из них хранится в
конкретной базе данных. Непосредственный
вызов хранимой
процедуры
 возможен,
только если он осуществляется в контексте
той базы
данных
,
где находится процедура.

Типы хранимых процедур

В
SQL Server имеется несколько типов хранимых
процедур
.

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

  • Пользовательские хранимые
    процедуры
     реализуют
    те или иные действия. Хранимые
    процедуры
     –
    полноценный объект базы данных.
    Вследствие этого каждая хранимая
    процедура
     располагается
    в конкретной базе данных, где и
    выполняется.

  • Временные хранимые
    процедуры
     существуют
    лишь некоторое время, после чего
    автоматически уничтожаются сервером.
    Они делятся на локальные и глобальные.
    Локальные временные хранимые
    процедуры
     могут
    быть вызваны только из того соединения,
    в котором созданы. При создании такой
    процедуры ей необходимо дать имя,
    начинающееся с одного символа #.
    Как и все временные объекты, хранимые
    процедуры
     этого
    типа автоматически удаляются при
    отключении пользователя, перезапуске
    или остановке сервера. Глобальные
    временные хранимые
    процедуры
     доступны
    для любых соединений сервера, на котором
    имеется такая же процедура. Для ее
    определения достаточно дать ей имя,
    начинающееся с символов ##.
    Удаляются эти процедуры при перезапуске
    или остановке сервера, а также при
    закрытии соединения, в контексте
    которого они были созданы.

Microsoft SQL Server — реализация языка программирования SQL

Microsoft SQL Server — система управления реляционными базами данных, разработанная корпорацией Microsoft и работающая только под Windows.

SQL Server использует процедурное расширение T-SQL (Transact-SQL). Сам язык SQL этой СУБД отличается от других реализаций SQL и иногда рассматривается как диалект T-SQL.

T-SQL поддерживает программные блоки (в виде процедур, которые хранятся в базе данных в скомпилированном виде и могут быть выполнены позднее создания, или анонимных блоков, которые не могут быть скомпилированы и используются только с виде скриптов), операторы управления потоком вычислений (в т. ч. условные переходы и циклы) и локальные переменные. Кроме того, T-SQL предоставляет ряд функций для работы со строками и датами, математических функций и т.д.

Для администрирования БД и разработки приложений для СУБД SQL Server может использоваться ряд инструментов, предоставляемых корпорацией Microsoft:

  • SQLCMD — инструмент с интерфейсом типа командной строки, предназначенный для выполнения команд SQL интерактивно или из скрипта; используется в качестве инсталляционного интерфейса по умолчанию.
  • Microsoft Visual Studio включает поддержку разработки для SQL Server.
  • SQL Server Management Studio — IDE для конфигурирования и управления БД SQL Server.

Примеры:

Факториал:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012

Используется рекурсивное определение факториала, реализованное через рекурсивный запрос. Каждая строка запроса содержит два числовых поля — n и n!, и каждая следующая строка вычисляется с использованием данных из предыдущей.

Можно вычислить целочисленные факториалы только до 20!. При попытке вычислить 21! возникает ошибка “Arithmetic overflow error”, т.е. происходит переполнение разрядной сетки.

Для вещественных чисел вычисляется факториал 100! (Для этого в примере необходимо заменить bigint на float в 3-ей строке)

with factorial(n, f) as
(
 select 0, convert(bigint,1) 
  union all
 select n+1, f*(n+1) from factorial where n<20
)
select cast(n as varchar)+'! = '+cast(f as varchar)
  from factorial

Числа Фибоначчи:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012

Используется итеративное определение чисел Фибоначчи, реализованное через рекурсивный запрос. Каждая строка запроса содержит два соседних числа последовательности, и следующая строка вычисляется как (последнее число, сумма чисел) предыдущей строки. Таким образом все числа, кроме первого и последнего, встречаются дважды, поэтому в результат входят только первые числа каждой строки.

with fibonacci(a, b) as
(
 select 1, 1
  union all
 select b, a+b from fibonacci where b < 1000
)
SELECT cast(a as varchar)+', ' AS [text()]
  FROM fibonacci
   FOR XML PATH ('')

Hello, World!:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012,

MySQL 5,

PostgreSQL 8.4,

PostgreSQL 9.1,

sqlite 3. 7.3

Факториал:

Пример для версий

Microsoft SQL Server 2005

declare @max_n tinyint = 20
;with t as (
   select 1 as n, convert(bigint,1) as f
   union all
   select n+1, f*(n+1) from t
   where n < @max_n
   
)
select convert(varchar,n)+'! = '+convert(varchar(32),f)+', ' 
from t as [text] 
FOR XML PATH ('')

Числа Фибоначчи:

Пример для версий

Microsoft SQL Server 2005,

Microsoft SQL Server 2008 R2,

Microsoft SQL Server 2012

Используется возможность рекурсивных запросов. Кол-во членов ряда — 92

declare @max_n tinyint = 92
;with t as (
	select n = 1, fib = convert(bigint,1), xfib = convert(bigint,0)
	 union all		  
	select n = n+1, fib = fib+xfib, xfib = fib from t 
        where n < @max_n
)
select fib from t

Get-Date — примеры работы с датой в Powershell

 


Get-Date возвращает в Powershell дату и время.   С помощью этого командлета мы можем получить нужное нам значение формата Datetime, что поможет нам выполнять, например, сравнение дат.


Т.е. выполнение команды без ключей вернет нам текущую дату в powershell:



Get-Date



Если нам нужно получить какую-то другую дату формата Datetime, то надо установить ее с помощью этого команды:



Get-Date -Year 2030 -Month 8 -Day 9 -Hour 10 -Minute 11 -Second 12



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




 




Получим свойства и методы этого объекта:



Get-Date | Get-Member


 


Все методы — это то что мы можем сделать с датой. Для примера получим дату минус один день от сегодняшнего числа:



(Get-Date). AddDays(-1)


Или прибавить дни через AddDays:



$result = (Get-Date).AddDays(365)


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



$result = (Get-Date).AddHours(30)


Таким же образом мы можем добавлять и убирать такие элементы дат:


  • AddDays — дни
  • AddHours — часы
  • AddMilliseconds — миллисекунды
  • AddMinutes — минуты
  • AddMonths — месяца
  • AddSeconds — секунды
  • AddYears — года

 




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



  • ToLongDateString — строка с днем недели и именем месяца
  • ToLongTimeString — показывает часы, минуты и время
  • ToShortDateString — возвращает только дату
  • ToShortTimeString — вернет только часы и минуты
  • ToString — вернут полную дату и время

Каждый из этих методов вызывается так:



(Get-Date). ToLongDateString()


Или на примере какой-то другой даты с переменной:



$yesterday = Get-Date -Month 6 -Year 2225
$yesterday.ToLongDateString()



Для того что бы получить дату из строки  нужно использовать ключ date:



Get-Date -Date "1/1/2019"


Если мы не установим время или дату, то значение возьмется текущее:



Get-Date -Date "10:15"



Нужно учитывать, что формат даты в таком варианте исполнения будет тем, который установлен в системных настройках. В моем случае американский и поэтому идет месяц, день, год. Если стоит русский будет день, месяц и год. Увидеть эту настройку можно так:



Get-WinSystemLocale


 




Возможно получить только день недели или час от времени и для этого нужно использовать Format или один из методов. Так я получу год:



Get-Date -Format "yyyy"


Или аналогично, но уже используя свойство:



(Get-Date).year


Используя Format всегда возвращается тип данных string, а не DateTime.


У нас есть еще множество свойств, кроме Year, которые мы можем получать:



Выведем день недели ( DayOfWeek):



(Get-Date).DayOfWeek


Обратите внимание, что не всегда возвращаемый объект типа DateTime. Он может быть и численным (int) или строковым, в случае с Format.


На примере Format есть много спецификаторов:


  • dddd — день недели в виде имени
  • MM — номер месяца
  • dd — день месяца
  • yyyy — год
  • HH:mm — часы и минуты
  • K — Часовой пояс
  • ss — секунды

Так мы выведем дату формата часы, минуты, день, месяц и год:



Get-Date -Format "HH:mm dd/MM/yyyy"


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


 




Выполнять сравнение дат можно в случае, если значение типа DateTime. Какого типа значение мы можем посмотреть двумя способами. При просмотра свойства объекта мы увидим какого типа он возвращает значение:



Get-ChildItem | Get-Member | Where-Object -Property Definition -Like "*datetime*"



Либо у получить это значение так:



(Get-Date).GetType()



Для примера сравним в powershell даты файла. На картинке выше видно, что у каждого файла есть свойство CreationTime формата DateTime. Сравним какие файлы были созданы за последние 15 дней:



Get-ChildItem -Path ".\Folder2\" | where -Property CreationTime -GT (Get-Date).AddDays(-15)


GT — говорит о том, что мы ищем значения только больше чем справа. Обо всех операторах сравнения мы говорили тут.  


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



Get-ChildItem -Path C:\Folder2\ | Where-Object {$_.CreationTime.Day -eq (Get-Date).Day}


Командлет Get-ChildItem мы рассматривали тут.


 




Один из интересных примеров в работе с датой это командлет New-TimeSpan, который вернет время работы сервиса или любого другого объекта, если передать ему время. Для примера так он вернет значение в минутах, секундах с установленной даты:



New-TimeSpan -Start (Get-Date).AddDays(-15)



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


На примере процессов:


Теги:

#powershell

Типы данных даты и времени

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


Типы данных DATETIME, DATE, TIME


Тип
данных DATETIME используется для величин, содержащих информацию как о
дате, так
и о времени в формате ‘YYYY-MM-DD HH:MM:SS’


Тип
данных DATE используется для величин с
информацией только о дате в формате ‘YYYY-MM-DD’. Поддерживается
диапазон
величин от ‘1000-01-01’ до ‘9999-12-31’.


Тип данных TIME используется для хранения значений
времени в формате HH.MM.SS[.ssss]


Тип данных YEAR


MySQL Server поддерживает однобайтный
тип данных YEAR, предназначенный для представления
значений года в формате YYYY. Диапазон возможных значений — от 1901 до
2155.


Величины типа YEAR могут быть
заданы в различных форматах:

  • Как четырехзначная строка в интервале значений от ‘1901’ до
    ‘2155’.

  • Как четырехзначное число в интервале значений от 1901 до
    2155.

  • Как
    двухзначная строка в интервале значений от ’00’ до ’99’. Величины в
    интервалах от ’00’ до ’69’ и от ’70’ до ’99’ при этом преобразуются в
    величины YEAR в интервалах от 2000 до 2069 и от 1970 до 1999
    соответственно.

  • Как двухзначное число в интервале значений от 1 до 99.
    Величины в интервалах от 1 до 69 и от 70 до 99 при этом преобразуются в
    величины YEAR в интервалах от 2001 до 2069 и от 1970 до 1999
    соответственно. Необходимо принять во внимание, что интервалы для
    двухзначных чисел и двухзначных строк несколько различаются, так как
    нельзя указать «ноль» непосредственно как число и интерпретировать
    его как 2000. Необходимо задать его как строку ‘0’ или ’00’, или же оно
    будет интерпретировано как 0000.


Недопустимые
величины YEAR преобразуются в 0000.


Тип данных TIMESTAMP

Назначение типа данных timestamp в MS SQL
Server и
MySQL Server значительно отличается.

В языке Transcat SQL, используемом в MS SQL Server тип данных,
TIMESTAMP представляет собой автоматически сформированные уникальные
двоичные числа. При произведении любых изменений в строке значение
TIMESTAMP будет обновлено. Таким образом, столбец типа TIMESTAMP можно
использовать, чтобы определить, было ли произведено изменение
какого-либо значения в строке с момента ее последнего считывания.
В таблице может быть только один столбец типа TIMESTAMP.


В MySQL Server тип столбца TIMESTAMP используется для автоматической
записи текущих даты и времени при выполнении операций вставки или
обновления. Допускается наличие нескольких столбцов типа TIMESTAMP в
таблице, но в этом случае автоматически обновляется только первый из
них. Столбец типа TIMESTAMP можно установить в значение, отличное от
текущих даты и времени путем явного указания значения столбца при
выполнении операций вставке и обновлении данных.

Функция SQL Server DATEFROMPARTS () по примерам

Сводка : в этом руководстве вы узнаете, как использовать функцию SQL Server DATEFROMPARTS () для построения даты из года, месяца и дня.

SQL Server

DATEFROMPARTS () Обзор функции

Функция DATEFROMPARTS () возвращает значение DATE , которое сопоставляется со значениями года, месяца и дня.

Ниже показан синтаксис функции DATEFROMPARTS () :

 

DATEFROMPARTS (год, месяц, день)

Язык кода: SQL (язык структурированных запросов) (sql)

Функция DATEFROMPARTS () принимает три аргумента:

  • год — это целочисленное выражение, которое преобразуется в год
  • месяц является целочисленное выражение, оценивающее месяц в диапазоне от 1 до 12.
  • день — это целочисленное выражение, определяющее день в диапазоне от 1 до 31

. Функция DATEFROMPARTS () возвращает значение DATE . Если какой-либо аргумент равен NULL, функция вернет NULL.

SQL Server

DATEFROMPARTS () Примеры функций

Давайте рассмотрим несколько примеров использования функции DATEFROMPARTS () .

Использование функции

DATEFROMPARTS () для возврата примера даты

В этом примере функция DATEFROMPARTS () используется для построения даты из значений года, месяца и дня:

 

SELECT DATEFROMPARTS (2020,12,31) a_date;

Язык кода: SQL (язык структурированных запросов) (sql)

Вот результат:

 

a_date ---------- 2020-12-31 (Затронута 1 строка)

Язык кода: SQL (язык структурированных запросов) (sql)

Использование функции

DATEFROMPARTS () с NULL, пример

В следующем примере возвращается NULL, поскольку аргумент месяца имеет значение NULL:

 

SELECT DATEFROMPARTS (2020, null, 31) a_date;

Язык кода: SQL (язык структурированных запросов) (sql)

Результат выглядит следующим образом:

 

a_date ---------- НОЛЬ (Затронута 1 строка)

Язык кода: SQL (язык структурированных запросов) (sql)

Пример использования функции

DATEFROMPARTS () с аргументами вне диапазона

В этом примере недопустимые аргументы передаются функции DATEFROMPARTS () , что приводит к ошибка:

 

ВЫБРАТЬ DATEFROMPARTS (2020,20, -1) a_date;

Язык кода: SQL (язык структурированных запросов) (sql)

Ниже показано сообщение об ошибке:

 

Невозможно построить дату типа данных, некоторые аргументы имеют недопустимые значения.

Язык кода: SQL (язык структурированных запросов) (sql)

В этом руководстве вы узнали, как построить значение DATE из его части, включая значения года, месяца и дня, с помощью DATEFROMPARTS () функция.

Список функций даты и времени в SQL Server (T-SQL)

Этот пост содержит список функций даты и времени Transact-SQL, доступных в SQL Server (начиная с SQL Server 2017).

Сюда входят функции, которые возвращают дату или части даты, а также функции, которые управляют и / или форматируют дату.

Системные значения даты / времени

Следующие функции возвращают системную дату и время. Значения даты и времени, возвращаемые этими функциями, являются производными от операционной системы, в которой работает экземпляр SQL Server.

Повышенная точность

Низкая точность

Дата / время возврата Детали

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

Например, вы можете использовать MONTH () , чтобы вернуть компонент месяца данной даты.

Возвращает значение даты / времени из своих частей

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

Например, вы можете передать значения года, месяца и дня в функцию DATEFROMPARTS () , и она вернет значение даты , состоящее из этих частей.

  • ХАРАКТЕРИСТИКИ ( год , месяц , день )
  • DATETIME2FROMPARTS ( год , месяц , день , час , минута , секунд , дроби , точность )
  • DATETIMEFROMPARTS ( год , месяц , день , час , минута , секунд , миллисекунды )
  • DATETIMEOFFSETFROMPARTS ( год , месяц , день , час , минут , секунд , дроби , смещение по часам , смещение по минутам , смещение по минутам )
  • SMALLDATETIMEFROMPARTS ( год , месяц , день , час , минут )
  • TIMEFROMPARTS ( час , минут , секунд , дроби , точность )

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

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

  • DATEDIFF ( datepart , startdate , enddate )
  • DATEDIFF_BIG ( datepart , startdate , enddate )

Обратите внимание, что эти функции, по сути, делают то же самое. Разница в возвращаемом значении.

Изменить значения даты / времени

Установка или возврат функций формата сеанса

Проверить значение даты / времени

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

Связанные функции / статьи

Научитесь использовать функции даты в SQL Server

Функции даты в SQL-сервере предоставляют набор функций, которые можно использовать для управления датами. Эта функция используется для самых разных операций, таких как добавление недель к дате, вычисление разницы между двумя датами или разложение даты на ее основные части.

Если вы не знакомы с функциями SQL, я бы рекомендовал изучить Введение во встроенные функции SQL Server.

Чтобы извлечь максимальную пользу из этого и других наших уроков, обязательно попрактикуйтесь на примерах!

Все примеры для этого урока основаны на Microsoft SQL Server Management Studio и базе данных AdventureWorks2012. Вы можете начать пользоваться этими бесплатными инструментами, используя мое Руководство Начало работы с SQL Server .

Введение в функции даты в SQL Server

Существует более двадцати пяти различных функций, отнесенных к категории функций даты в SQL-сервере.

Все функции перечислены на странице Функции даты (Transact-SQL). Я бы рекомендовал посетить эту страницу, чтобы узнать о каждой функции.

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

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

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

Вот моя попытка:

Функции DateTime — наиболее распространены зеленые цвета

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

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

GETDATE

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

Общая форма функции ПОЛУЧИТЬ ДАТА:

 GETDATE () 

Вот пример использования GETDATE

 ВЫБРАТЬ GETDATE () 

Что возвращает 2015-08-09 21: 55: 00.477

Более полезным примером является использование GETDATE с DATEDIFF или DATEADD. Посмотрите DATEDIFF для более полного примера.

Функции для получения частей даты

Части даты относятся к различным компонентам даты, таким как год, месяц или день.Части даты используются в нескольких функциях в этом и других разделах. Вот таблица частей даты, которые вы можете использовать в таких функциях, как DATENAME, DATEPART, DATEDIFF и DATEADD.

Datepart Values ​​

Имена говорят сами за себя. Каждая часть даты соответствует хорошо известному периоду, например месяцу или часу.

ИМЯ

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

Общая форма DATENAME —

.

 DATENAME ( часть даты , значение  ) 

Где часть даты соответствует списку предопределенных частей, а значение — это дата, с которой вы работаете.

Эта функция возвращает символьное значение.

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

 ВЫБЕРИТЕ ИМЯ ДАТЫ (год, GETDATE ()) как Год,
DATENAME (неделя; GETDATE ()) как неделя,
DATENAME (dayofyear, GETDATE ()) как DayOfYear,
DATENAME (месяц; GETDATE ()) как месяц,
DATENAME (день; GETDATE ()) as Day,
DATENAME (день недели, GETDATE ()) как WEEKDAY 

Предполагая, что GETDATE возвращает 2015-08-10 12:56:25.313 пример результатов запроса:

DATENAME Results

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

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

Предположим, менеджеру по продажам нужна сводка еженедельных продаж. Эту информацию мы можем предоставить с помощью функции DATENAME.

 ВЫБЕРИТЕ ИМЯ ДАТЫ (год, Дата заказа) как Год заказа,
DATENAME (неделя, OrderDate) как OrderWeek,
СУММ (TotalDue) как WeeklySales
ОТ ПРОДАЖ.SalesOrderHeader
WHERE DATENAME (год, OrderDate) = '2008'
ГРУППА ПО ИМЕНИ ДАТЫ (год, Дата заказа), ИМЯ ДАТЫ (неделя, Дата заказа)
ORDER BY DATENAME (год, OrderDate), DATENAME (неделя, OrderDate) 

Вот результаты

DATENAME — Notice OrderWeek сортируется как символьное значение

. Я хочу отметить, что, хотя мы отсортировали по годам и неделям, недели кажутся неупорядоченными. Это потому, что возвращаемое значение OrderWeek является символьным значением. Чтобы выполнить числовую сортировку, нам нужно преобразовать результат в числовое значение.

Мы могли бы легко преобразовать значение в предложении ORDER BY, но в этом нет необходимости, если вы узнаете о DATEPART

.

DATEPART

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

Общая форма DATEPART —

 DATEPART ( часть даты , значение  ) 

Где часть даты соответствует списку предопределенных частей, а значение — это дата, с которой вы работаете.

Эта функция возвращает целое число.

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

 SELECT DATEPART (YEAR, GETDATE ()) as Year,
DATEPART (WEEK, GETDATE ()) как неделя,
DATEPART (DAYOFYEAR, GETDATE ()) как DayOfYear,
DATEPART (MONTH; GETDATE ()) как месяц,
DATEPART (DAY, GETDATE ()) как Day,
DATEPART (WEEKDAY, GETDATE ()) как WEEKDAY 

Предполагая, что GETDATE возвращает 2015-08-10 12: 56: 25.313, пример результатов запроса:

Результаты DATEPART

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

Мы также можем получить сводку общих продаж с помощью DATEPART, как мы это делали для DATENAME. Вот запрос

 ВЫБЕРИТЕ DATEPART (год, Дата заказа) как Год заказа,
DATEPART (неделя, OrderDate) как OrderWeek,
СУММ (TotalDue) как WeeklySales
ОТ Sales.SalesOrderHeader
ГДЕ DATEPART (год, OrderDate) = 2008
GROUP BY DATEPART (год, OrderDate), DATEPART (неделя, OrderDate)
ORDER BY DATEPART (год, OrderDate), DATEPART (неделя, OrderDate) 

Вы заметили, что эти результаты правильно отсортированы по неделям:

Результаты DATEPART, отсортированные в числовом порядке

DAY, MONTH, YEAR

Функции ДЕНЬ, МЕСЯЦ и ГОД возвращают в зависимости от заданной даты день, месяц или год в виде целого числа.

Общая форма одинакова для всех трех функций. Для краткости мы просто покажем ДЕНЬ, две другие функции работают аналогичным образом.

Вот его общий вид:

 ДЕНЬ ( значение ) 

Где значение — это дата, с которой нужно работать.

Вот быстрый пример, показывающий эти функции в игре

 ВЫБРАТЬ HireDate,
YEAR (HireDate) как HireYear,
МЕСЯЦ (HireDate) HireMonth,
DAY (HireDate) как HireDay
ОТ HumanResources.Сотрудник 

Чьи результаты:

Результаты DAY, MONTH и YEAR

Возможно, вы заметили, что YEAR (значение) — это сокращенная DATEPART (год, значение). Оба возвращают один и тот же результат, вот оператор SQL, который вы можете попробовать:

 ВЫБРАТЬ HireDate,
YEAR (HireDate) как HireYear,
DATEPART (год, HireDate) как HireYearFromDatePart
ОТ HumanResources. Сотрудник 

Вы найдете аналогичные эквиваленты для MONTH и DAY.

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

РАЗНДАТ

Функция DATEDIFF возвращает количество лет, месяцев, недель или дней между двумя датами.

Общая форма DATEDIFF —

.

 DATEDIFF ( часть даты ,  начальное значение ,  конечное значение ) 

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

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

Эта функция может показаться немного сложной, но ее действительно стоит понять, поскольку она имеет много практических применений в SQL.

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

Рассмотрим следующий пример:

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

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

Вот SQL

 ВЫБЕРИТЕ NationalIDNumber,
Дата приема на работу,
DATEDIFF (год, HireDate, GETDATE ()) YearsOfService
ОТ HumanResources.Наемный рабочий
ГДЕ DATEDIFF (год, HireDate, GETDATE ())> = 10
ЗАКАЗАТЬ ПО ГОДУ ОБСЛУЖИВАНИЯ DESC 

Чьи результаты

Результаты DATEDIFF

DATEADD

Функция DATEADD используется для добавления лет, месяцев, недель или дней между датой.

Общая форма DATEADD —

.

DATEADD ( часть даты , номер , значение )

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

Если число положительное, то это количество частей даты добавляется к значению.

Если число отрицательное, то фактически из значения вычитаются части даты.

Эта функция может показаться немного сложной, но ее действительно стоит понять, поскольку она имеет много практических применений в SQL.

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

Рассмотрим следующий пример:

Менеджер по продажам разговаривал с менеджером по производству о продаже товаров через Интернет.Они хотят производить велосипеды по заказу. Если бы велосипеды были заказаны сегодня, когда их можно было бы отправить покупателю?

Если вы посмотрите на таблицу Product, вы увидите, что там есть поле DaysToManufacture. Используя это с DATEADD в сочетании с GETDATE (), мы можем рассчитать количество дней в будущем.

 ВЫБРАТЬ ИМЯ,
       DaysToManufacture,
       GETDATE () как Сегодня,
       DATEADD (день; DaysToManufacture; GETDATE ()) EarliestDate
ОТ ПРОИЗВОДСТВА.Товар
ГДЕ Дней до производства> 1 

Результат

Используйте DATEADD для добавления ДНЕЙ к DATE

Помощник SQL Server — Функции даты и времени

Функция Описание
CURRENT_TIMESTAMP Возвращает значение datetime2 (7), которое содержит дату и время компьютера, на котором запущен экземпляр SQL Server. Смещение часового пояса не включается.

Синтаксис:

 CURRENT_TIMESTAMP 
DATEADD Возвращает новое значение datetime на основе добавления интервала к указанной дате.

Синтаксис:

 ДОБАВЛЕНИЕ ДАТЫ (часть даты, число, дата) 
РАЗНДАТ Возвращает количество границ даты и времени, пересеченных между двумя указанными датами.

Синтаксис:

 РАЗНДАТ (datepart, startdate, enddate) 
ИМЯ Возвращает строку символов, представляющую указанную часть указанной даты.

Синтаксис:

 DATENAME (datepart, date) 
DATEPART Возвращает целое число, представляющее указанную часть указанной даты.

Синтаксис:

 DATEPART (datepart, date) 
ДЕНЬ Возвращает целое число, представляющее часть дня указанной даты.

Синтаксис:

 ДЕНЬ (дата) 
GETDATE Возвращает текущую системную дату и время в стандартном внутреннем формате SQL Server для значений datetime.

Синтаксис:

 GETDATE () 
GETUTCDATE Возвращает значение datetime, представляющее текущее время в формате UTC (всемирное координированное время или среднее время по Гринвичу). Текущее время в формате UTC получается из текущего местного времени и настройки часового пояса в операционной системе компьютера, на котором запущен экземпляр Microsoft SQL Server.

Синтаксис:

 GETUTCDATE () 
ISDATE Определяет, является ли входное выражение datetime или smalldatetime допустимым значением даты или времени.

Синтаксис:

 ISDATE (выражение) 
МЕСЯЦ Возвращает целое число, которое представляет часть месяца указанной даты.

Синтаксис:

 МЕСЯЦ (дата) 
ГОД Возвращает целое число, представляющее часть года указанной даты.

Синтаксис:

 ГОД (дата) 

Изучение функций DATE в SQL — SQLServerCentral

Введение

Работа с датами в SQL была для меня весьма увлекательной. Часто я сталкиваюсь с новичками, которым довольно сложно понять, как работают даты в SQL Server. Особенно, когда дело доходит до использования различных функций даты, связанных с форматированием дат, извлечением года, месяцев из даты и т. Д.Мы рассмотрим некоторые из важных функций DATE, доступных в SQL Server — DATEADD , DATEDIFF , DATEPART, и т. Д. С примерами.

В этой статье мы рассмотрим следующее:

  1. DATEADD функция
    • Добавить или вычесть периоды времени ( год / месяц / день ) с заданной даты
  2. DATEDIFF функция
    • Некоторые простые варианты использования функции РАЗНДАТ
    • Объедините DATEDIFF с DATEADD для вычисления сложных периодов времени
  3. DATEPART функция
    • Изучите функцию DATEPART вместе с некоторыми примерами

Функция DATEADD

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

Позвольте мне объяснить простой пример использования этого. Предположим, вы работаете в компании электронной коммерции, которая отправляет своим клиентам заказы, размещенные в Интернете. Доставка обычно осуществляется в течение двух дней после размещения заказа. Здесь ShippingDate можно рассчитать, добавив два дня к OrderDate .

Синтаксис функции DATEADD следующий:

 DATEADD (DATEPART, NUMBER, DATE) 

Аргументы, принимаемые функцией DATEADD, следующие:

  • DATEPART : определяет, какую часть даты мы хотим добавить или вычесть (день, месяц, неделя и т. Д.))
  • НОМЕР : Это число, на которое значение даты должно быть увеличено или уменьшено. Это должно быть целое число.
  • ДАТА : это исходное значение даты, на котором будут выполняться все вычисления. Это может быть значение Date, DateTime, DateTime2, SmallDateTime, DateTimeOffset или Time.

Если мы рассмотрим тот же вариант использования, который описан выше, предположим, что заказ размещен 15 января 2020 года. Итак, если мы добавим два дня, то ShippingDate будет 17 января 2020 года.Это можно рассчитать следующим образом:

 OrderDate = 2020-01-15
ShippingDate = DATEADD (ДЕНЬ; 2; Дата заказа) 

Существуют различные значения аргумента DATEPART, которые обсуждаются ниже вместе с короткими значениями в скобках.

  • ГОД (гг, гггг)
  • КВАРТАЛ (qq, q)
  • МЕСЯЦ (мм, м)
  • ДЕНЬ ГОД (ды, г)
  • ДЕНЬ (дд, д)
  • НЕДЕЛЯ (нед, нед)
  • ДЕНЬ НЕДЕЛИ (dw, w)
  • ЧАС (чч)
  • МИНУТА (миль, н)
  • СЕКУНДА (сс, с)
  • МИЛЛИСЕКУНД (мс)
  • микросекунды (мкс)
  • НС (нс)

Примеры

Давайте теперь посмотрим на несколько примеров того, как мы можем использовать функцию DATEADD и достичь желаемых результатов.Обратите внимание, что для некоторых примеров я буду использовать функцию GETDATE (), а для других я буду использовать жестко заданное значение даты. Поскольку я пишу эту статью 4 февраля 2020 года, все ссылки будут приняты соответствующим образом.

ГОД

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

 УСТАНОВИТЬ БЕЗ СЧЕТА
ВЫБЕРИТЕ GETDATE () как сегодня
ВЫБЕРИТЕ DATEADD (YEAR, 1, GETDATE ()) AS NextYear
ВЫБЕРИТЕ DATEADD (ГОД; -1; GETDATE ()) как предыдущий год 

Рис.1 — DatePart Год

МЕСЯЦ

Возвращает то же DateTime, что и в предыдущем и следующем месяце.

 УСТАНОВИТЬ БЕЗ СЧЕТА
ВЫБЕРИТЕ GETDATE () как сегодня
ВЫБЕРИТЕ DATEADD (МЕСЯЦ, 1, GETDATE ()) как NextMonth
ВЫБЕРИТЕ DATEADD (МЕСЯЦ; -1, GETDATE ()) как предыдущий месяц 

Рис 2 — DatePart Месяц

ЧАС

Возвращает то же DateTime, что и предыдущий и следующий час.

 УСТАНОВИТЬ БЕЗ СЧЕТА
ВЫБЕРИТЕ GETDATE () как сегодня
ВЫБЕРИТЕ DATEADD (HOUR, 1, GETDATE ()) как NextHour
ВЫБЕРИТЕ DATEADD (ЧАС; -1; GETDATE ()) как Предыдущий час 

Рис. 3. DatePart Hour

. Точно так же вы можете использовать все остальные аргументы DATEPART таким же образом, как в этих примерах.

DATEDIFF Функция

Функция DateDiff используется для вычисления разницы во времени между двумя заданными датами или значениями времени. Он используется для подсчета количества лет, месяцев, дней, минут, секунд и т. Д. Между StartDate и EndDate .

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

Синтаксис функции РАЗНДАТА следующий:

 DATEADD (DATEPART, STARTDATE, ENDDATE) 

Аргументы, принимаемые функцией DATEADD, следующие:

  • DATEPART : определяет, какую часть даты мы хотим добавить или вычесть (день, месяц, неделя и т. Д.).
  • ДАТА НАЧАЛА : Это начальная дата, с которой функция начнет вычислять период.Это может быть значение Date, DateTime, DateTime2, SmallDateTime, DateTimeOffset или Time.
  • ENDDATE : это конечная дата, до которой функция завершит вычисление периода. Это может быть значение Date, DateTime, DateTime2, SmallDateTime, DateTimeOffset или Time.

Если мы рассмотрим вариант использования, описанный выше, предположим, что рейс покинул станцию ​​Origin в 10 часов утра и достиг пункта назначения в 12 часов дня. В таком случае время в пути будет рассчитано как 12:00 — 10:00 = 2 часа.Это можно рассчитать следующим образом:

 StartTime = 10: 00: 00.000
EndTime = 12: 00: 00.000
TravelTime = DATEDIFF (ЧАС, Время начала, Время окончания) 

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

 УСТАНОВИТЬ БЕЗ СЧЕТА
ИДТИ
ВЫБЕРИТЕ РАЗНДАТ (ЧАС, '10: 00: 00.000', '12: 00: 00.000') КАК TravelTimeInHours
ВЫБРАТЬ РАЗНДАТ (МИНУТЫ, '10: 00: 00.000', '12: 00: 00.000') КАК TravelTimeInMinutes 

Рис.4 — Разница во времени

Расчет возраста по дате рождения

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

Давайте рассмотрим следующий набор данных, в котором есть два пользователя вместе с их DateOfBirths. Мы можем рассчитать возраст, используя функцию DateDiff . Здесь важно отметить, что для даты окончания мы рассматриваем текущую дату из системы, а дату начала — как дату рождения.

 ВЫБРАТЬ
[Пользователь]
, [DOB]
, DATEDIFF (YEAR; [DOB], GETDATE ()) AS AgeInYears
ОТ [Пользователи] 

Рис. 5. Расчет возраста

Когда вы увидите приведенный выше расчет, вы можете заметить, что расчет возвращает завышенное значение возраста. Например, Адаму исполнилось 27 лет в декабре 2019 года, однако запрос возвращает 28. Это потому, что мы просто учитываем годы при вычислении возраста, а это неверно.

Самый точный способ вычисления возраста — это извлечь разницу в годах из DateOfBirth, как мы делали ранее, а затем добавить количество лет к BirthDate. Наконец, проверьте, больше ли дата после сложения лет, чем сегодня. Если он больше, чем сегодня, вычтите из него 1.

Давайте посмотрим, как это работает, шаг за шагом.

  1. Вычислите AgeInYears , как мы делали ранее. Для этого шага вы можете следовать тому же сценарию, который указан выше.
  2. Добавьте AgeInYears к DOB и сохраните его в новом столбце ThisYearBirthDate .
     ВЫБРАТЬ
    [Пользователь]
    , [DOB]
    , DATEDIFF (YEAR; [DOB], GETDATE ()) AS AgeInYears
    , DATEADD (YEAR, DATEDIFF (YEAR; [DOB], GETDATE ()), [DOB]) AS ThisYearBirthDate
    ОТ [Пользователи]
     

    Рис.6 — Расчет возраста

  3. Проверьте, не больше ли ThisYearBirthDate , чем сегодня.Если да, вычтите из него 1 и верните AdjustedAgeInYears .
     ВЫБРАТЬ
    [Пользователь]
    , [DOB]
    , DATEDIFF (YEAR; [DOB], GETDATE ()) AS AgeInYears
    , DATEADD (YEAR, DATEDIFF (YEAR; [DOB], GETDATE ()), [DOB]) AS ThisYearBirthDate
    , РАЗНДАТ (ГОД; [ДОБ]; ПОЛУЧИТЬДАТЕ ()) -
    СЛУЧАЙ, КОГДА
    DATEADD (YEAR; DATEDIFF (YEAR; [DOB], GETDATE ()), [DOB])> GETDATE ()
    ТО 1
    Иначе 0
    КОНЕЦ КАК Скорректированный Возраст в годах
    ОТ [Пользователи]
     

    Рис. 7 — Расчет возраста

Как вы можете видеть в приведенном выше сценарии, столбец AdjustedAgeInYears возвращает правильный полный возраст обоих пользователей.

Расчет начала или конца периода времени

Иногда нам нужно вычислить дату начала периода, скажем, начало этой недели или начало прошлого месяца и так далее. Это полезно при анализе финансовых отчетов, когда нам нужно рассчитывать отчеты на основе Год до даты, Месяц до даты и т. Д. Эти типы вычислений также могут быть выполнены с использованием комбинации функций DATEDIFF и DATEADD. В приведенных ниже примерах я буду использовать жестко запрограммированное значение даты вместо функции GETDATE.

Расчет начала периода времени

 DECLARE @Today DATE = '2019-12-26'
ВЫБЕРИТЕ DATEADD (WEEK, DATEDIFF (WEEK, 0, @ Today), 0) StartOfWeek
ВЫБЕРИТЕ ДОБАВЛЕНИЕ ДАТЫ (МЕСЯЦ, РАЗНДАТ (МЕСЯЦ, 0, @ Сегодня), 0) StartOfMonth
ВЫБЕРИТЕ DATEADD (YEAR, DATEDIFF (YEAR, 0, @ Today), 0) StartOfYear 

Рис. 8. Начало временного периода

В приведенном выше скрипте вы можете заметить, что для DATEDIFF вместо значения StartDate я использовал « 0 » ( ноль ). Ну, этот ноль имеет особое значение в SQL Server, и он соответствует дате « 1900-01-01 ».Итак, когда мы используем значение как ноль, ядро ​​базы данных рассматривает StartDate как 1900-01-01 и соответственно вычисляет все последующие периоды. Точно так же для DATEADD мы предоставляем значение Date как ноль, так что все вычисления выполняются с 1900-01-01.

То, как работает приведенный выше сценарий, заключается в том, что сначала мы вычисляем разницу за определенный период времени между заданной датой и контрольной датой ( в данном случае, 1900-01-01 ).Если период равен ГОД, тогда , то значение будет 119 . Когда у нас есть это значение, следующим шагом будет добавление его к базисному году с помощью функции DATEADD , используя тот же период времени. Это вернет первое значение этого периода независимо от года, месяца или квартала.

 DECLARE @Today DATE = '2019-12-26'
ВЫБЕРИТЕ РАЗНДАТ (ГОД, 0, @ Сегодня) Разница в годах
ВЫБЕРИТЕ DATEADD (YEAR, DATEDIFF (YEAR, 0, @ Today), 0) StartOfYear
 

Рис.9 — Разница в годах от 1900 г.

Расчет конца периода времени

 DECLARE @Today DATE = '2019-10-26'
ВЫБЕРИТЕ ДОБАВЛЕНИЕ ДАТЫ (МИЛЛИСЕКУНДУ; -3; ДОБАВЛЕНИЕ ДАТЫ (НЕДЕЛЯ; РАЗНДАТ (НЕДЕЛЯ; 0; @ Сегодня) +1,0)) EndOfWeek
ВЫБЕРИТЕ ДОБАВЛЕНИЕ ДАТЫ (МИЛЛИСЕКУНД, -3, ДОБАВЛЕНИЕ ДАТЫ (МЕСЯЦ, РАЗНДАТ, МЕСЯЦ, 0, @ Сегодня) +1,0)) EndOfMonth
ВЫБЕРИТЕ ДОБАВЛЕНИЕ ДАТЫ (МИЛЛИСЕКУНДУ, -3, ДОБАВЛЕНИЕ ДАТЫ (ГОД, РАЗНДАТ (ГОД, 0, @ Сегодня) +1,0)) EndOfYear 

Рис. 10 — Конец периода времени — DateTime

Это также работает аналогично описанному выше, однако мы добавляем один период после вычисления разницы с 1900-01-01, а затем вычитаем 3 миллисекунды из общего значения.Это дает нам предыдущий период времени со значением в миллисекундах до 997 . Есть хорошая документация о том, как округление DateTime работает в SQL и почему мы вычитаем 3 миллисекунды вместо 1.

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

 DECLARE @Today DATE = '2019-10-26'
ВЫБРАТЬ CAST (DATEADD (DAY, -1, DATEADD (WEEK, DATEDIFF (WEEK, 0, @ Today) +1,0)) AS DATE) EndOfWeek
ВЫБРАТЬ CAST (DATEADD (DAY, -1, DATEADD (MONTH, DATEDIFF (MONTH, 0, @ Today) +1,0)) AS DATE) EndOfMonth
SELECT CAST (DATEADD (DAY, -1, DATEADD (YEAR, DATEDIFF (YEAR, 0, @ Today) +1,0)) AS DATE) EndOfYear 

Рис. 11 — Конец временного периода — Дата

В приведенном выше примере при вычислении периода окончания недели вы можете заметить, что EndOfWeek обычно приходится на воскресенье.Однако это может быть не всегда, и вы можете захотеть это изменить. Вы можете установить начало дня недели с помощью оператора DATEFIRST в SQL, и таким образом он сообщит механизму базы данных, с какого дня недели он должен начинать вычисление новой недели. Давайте теперь посмотрим, как мы можем установить выходной день как субботу вместо воскресенье и снова выполнить запрос для EndOf Week .

 УСТАНОВИТЬ ДАТУ ПЕРВАЯ 7;
/ *
    Установка значения DATEFIRST как 7 вернет субботу как конец недели в этом случае.
* /
ОБЪЯВИТЬ @Today DATE = '2019-10-26'
ВЫБЕРИТЕ CAST (DATEADD (dd, 7- (DATEPART (WEEKDAY, @Today)), DATEADD (dd, DATEDIFF (dd, 0, @Today), 0)) AS DATE) EndOfWeek 

Рис 12 — Использование DateFirst

Функция DATEPART

Это одна из самых простых функций даты, используемых в SQL Server.Он используется для извлечения значения определенной DatePart из заданной даты. DateParts может быть любым из года, месяца, квартала, дня, недели и т. Д. Чтобы понять вариант использования, давайте рассмотрим, что нам нужно создать ежемесячный отчет о продажах, который будет агрегировать валовые продажи за все дни этого месяца и агрегировать данные.

Синтаксис функции DATEPART следующий:

 DATEPART (DATEPART, DATE) 

Аргументы, принимаемые функцией DATEADD, следующие:

  • DATEPART : определяет, какую часть даты мы хотим добавить или вычесть (день, месяц, неделя и т. Д.))
  • ДАТА : Это значение даты, из которого должна быть извлечена деталь. Это может быть значение Date, DateTime, DateTime2, SmallDateTime, DateTimeOffset или Time.

Для этого примера мы рассмотрим базу данных WideWorldImportersDW и сгенерируем аналогичный отчет.

Ежемесячный отчет о продажах

 USE [WideWorldImportersDW]
ИДТИ
ВЫБРАТЬ
DATEPART (МЕСЯЦ, [Код даты счета-фактуры]) КАК [Месяц]
, SUM ([Итого, включая налог]) [Итого, включая налог]
ОТ ФАКТА.распродажа
ГДЕ [Ключ даты счета] МЕЖДУ "2014-01-01" И "2014-12-01"
ГРУППА ПО
DATEPART (МЕСЯЦ, [Код даты счета-фактуры])
СОРТИРОВАТЬ ПО
DATEPART (МЕСЯЦ, [Код даты счета-фактуры])
GO 

Рис 13 — DatePart Месяц

Годовой отчет о продажах

 USE WideWorldImportersDW
ИДТИ
ВЫБРАТЬ
DATEPART (YEAR, [Код даты счета-фактуры]) AS [Year]
, SUM ([Итого, включая налог]) [Итого, включая налог]
ОТ ФАКТОВ ПРОДАЖИ
ГРУППА ПО
DATEPART (ГОД, [ключ даты счета])
СОРТИРОВАТЬ ПО
DATEPART (ГОД, [ключ даты счета])
GO 

Рис. 14 — DatePart Year

Аналогично, функция DATEPART может также использоваться для извлечения других частей даты, таких как квартал, неделя, час, минута и т. Д.

Еда на вынос

В этой статье обсуждается, как работать с функциями DATE в SQL, а также приводится несколько их примеров. Для дальнейших шагов обратитесь к следующему:

Функции даты и времени в SQL Server

В этой статье мы узнаем о функциях даты и времени в SQL Server. Эти функции работают с заданной датой и временем. Эти функции являются предопределенными функциями SQL.

Типы функций Datetime

  1. Getdate
  2. День
  3. Месяц
  4. Год
  5. Дата
  6. Dateadd
  7. Datediff
  8. Datepart

Функция Getdate () date

возвращает текущее время и Getdate .

Синтаксис

Day ()

Эта функция возвращает значение дня с заданной даты

Синтаксис

  1. select DAY (‘2018/10/31’)

Month

Эта функция возвращает значение месяца с указанной даты

Синтаксис

  1. выберите Месяц (‘2018/10/31’)

Год ()

Эта функция возвращает значение года с указанной даты

Синтаксис

  1. выберите год (‘2018/10/31’)

Datename ()

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

Пример

  1. выберите DATENAME (DW, ‘2018/10/31’)
  2. выберите DATENAME (MM, ‘2018/10/31’)

Результат

Dateadd ()

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

синтаксис

  1. select DATEADD (‘День / месяц / год’, ‘Номер числа, который нужно добавить’, ‘Дата’)

Пример

  1. select DATEADD (dd, 5, getdate ())
  2. выберите DATEADD (MM, 1, getdate ())
  3. выберите DATEADD (YYYY, 1, getdate ())

Результат

Datediff ()

Datediff используется для поиска разница между датами.Он вернет различия между выражениями начальной и конечной даты.

Синтаксис

  1. select dateiff (‘День / месяц / год’, ‘startDate’, ‘endDate’)

Пример

  1. select DATEDIFF (dd, ‘2017/2/3’, ‘2018 / 3/5 ‘) в качестве TotalDays
  2. выберите DATEDIFF (MM,’ 2017/2/3 ‘,’ 2018/3/5 ‘) в качестве TotalMonths
  3. выберите DATEDIFF (YYYY,’ 2017/2/3 ‘,’ 2018 / 3/5 ‘) в качестве TotalWeeks
  4. выберите DATEDIFF (WK,’ 2017/2/3 ‘,’ 2018/3/5 ‘) в качестве TotalWeeks
  5. выберите DATEDIFF (HH,’ 2017/2/3 ‘,’ 2018 / 3/5 ‘) В качестве TotalHours
  6. выберите DATEDIFF (MI,’ 2017/2/3 ‘,’ 2018/3/5 ‘) В качестве TotalMin

Результат

Пример 1

Как мы найти разницу между значениями строки столбца.

Создать таблицу,

  1. createtable Userdate (ID int identity, date date date)

Добавить какое-нибудь значение в таблицу,

  1. вставить в значения Userdate (‘1994/12/30’)
  2. вставить в значения Userdate (‘1995/7/4’)
  3. вставить в значения Userdate (‘2000/9/1’)
  4. вставить в значения Userdate (‘1999/12/30’)

Теперь найдите разницу. Используйте этот запрос:

  1. выберите a1.Дата рождения, dateiff (день, a1.birthdate, a2.birthdate) как DobDiff от Userdate a1 внутреннего соединения Userdate a2 на a2.id = a1.id + 1

Результат

Datepart ()

Возвращает значения дня, месяца и года из заданного выражения даты

Пример

  1. выберите DATEPART (day, getdate ()) в качестве дней
  2. выберите DATEPART (MM , getdate ()) как месяц
  3. выберите DATEPART (YYYY, getdate ()) как год
  4. выберите DATEPART (WK, getdate ()) как слабый
  5. выберите DATEPART (HH, getdate ()) как часы

Результат

Сводка

В этой статье мы изучили функции даты и времени в SQL Server. Функции DateTime — это предварительно определенные функции SQL.

Совет Microsoft SQL Server для получения части даты в поле DateTime

Предоставлено Джимом Фергюсоном, старшим архитектором приложений

Даты в Microsoft SQL Server могут включать как дату, так и время.
Часто желательно извлекать части поля даты и игнорировать
другие части. Часто это делается для демонстрации. Например,
Функция Transact SQL DatePart () может использоваться для получения только дня, года,
месяц и т. д.части значения даты. Функция DatePart () возвращает целочисленное значение.

Что делать, если вам нужно извлечь всю часть даты из поля datetime,
но хотите игнорировать временную часть? Это часто желательно, если вы
диапазоны дат тестирования в предложении where и хотите включить строки, где
значение даты находится на граничном условии даты окончания:

ВЫБЕРИТЕ * ИЗ заказов, ГДЕ OrderDate <= '2016-08-25'
 

строк от 25 августа 2016 г. с включенной временной частью не будут включены в эту выборку.

Простое использование DatePart () для получения частей даты ММ, ДД и ГГГГ не превратит значение в выражение, которое можно проверить в предложении «where».

Transact SQL предоставляет функции Cast и Convert для преобразования из одного типа данных в другой. Один из способов решения проблемы извлечения
Часть даты поля datetime, оставляя выражение как тип даты, который может быть протестирован, заключается в использовании функции Convert:

ВЫБРАТЬ ПРЕОБРАЗОВАТЬ (varchar (8), OrderDate, 112) AS OrderDateOnly FROM orders
 

Это работает, но возвращает дату в виде строки из 8-значных значений в формате ГГГГММДД.Затем вы можете превратить эту символьную строку обратно в bona
fide значение даты, заключив выражение в оболочку с функцией Cast, чтобы преобразовать строку обратно в дату:

ВЫБРАТЬ приведение (CONVERT (varchar (8), OrderDate, 112) AS datetime) AS OrderDateOnly FROM Orders
 

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

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

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