Данные даты и времениDate and Time Data

В SQL Server 2008 появились указанные ниже новые типы данных для обработки сведений о дате и времени.SQL Server 2008 introduces new data types for handling date and time information. Новые типы данных включают отдельные типы для даты и времени, а также расширенные типы данных, обладающие большим диапазоном, большей точностью и учитывающие часовые пояса.The new data types include separate types for date and time, and expanded data types with greater range, precision, and time-zone awareness. Начиная с .NET Framework 3.5 с пакетом обновления 1 (SP1), поставщик данных .NET Framework для SQL Server (System.Data.SqlClient) полностью поддерживает все новые возможности ядра СУБД SQL Server 2008.Starting with the .NET Framework version 3.5 Service Pack (SP) 1, the .NET Framework Data Provider for SQL Server (System.Data.SqlClient) provides full support for all the new features of the SQL Server 2008 Database Engine. Для использования новых возможностей с SqlClient необходимо установить .NET Framework 3.5 с пакетом обновления 1 (SP1) или более поздней версии.You must install the .NET Framework 3.5 SP1 (or later) to use these new features with SqlClient.

В версиях SQL Server ранее SQL Server 2008 было всего два типа данных для работы с датой и временем: datetime и smalldatetime.Versions of SQL Server earlier than SQL Server 2008 only had two data types for working with date and time values: datetime and smalldatetime. Оба типа данных содержат как значение даты, так и значение времени, что затрудняет работу только со значениями даты или времени.Both of these data types contain both the date value and a time value, which makes it difficult to work with only date or only time values. Кроме того, эти типы данных поддерживают только даты после введения григорианского календаря в Англии в 1753 г.Also, these data types only support dates that occur after the introduction of the Gregorian calendar in England in 1753. Другое ограничение заключается в том, что эти устаревшие типы данных не учитывают часовые пояса, что затрудняет работу с данными, поступившими из разных часовых поясов.Another limitation is that these older data types are not time-zone aware, which makes it difficult to work with data that originates from multiple time zones.

Полная документация по типам данных SQL Server доступна в электронной документации по SQL Server.Complete documentation for SQL Server data types is available in SQL Server Books Online. В приведенной ниже таблице перечислены разделы, посвященные дате и времени, для конкретных версий SQL Server.The following table lists the version-specific entry-level topics for date and time data.

Электронная документация по SQL ServerSQL Server Books Online

  1. Использование данных даты и времениUsing Date and Time Data

Типы данных даты и времени и только даты, появившиеся в SQL Server 2008Date/Time Data Types Introduced in SQL Server 2008

В приведенной ниже таблице описаны новые типы данных даты и времени.The following table describes the new date and time data types.

Тип данных SQL ServerSQL Server data type ОписаниеDescription
date Тип данных date имеет диапазон от 1 января 01 года н. э. до 31 декабря 9999 года н. э. с точностью до дня.The date data type has a range of January 1, 01 through December 31, 9999 with an accuracy of 1 day. Значение по умолчанию - 1 января 1900 года.The default value is January 1, 1900. Размер хранения составляет 3 байта.The storage size is 3 bytes.
time Тип данных time сохраняет только значения времени, основанные на 24-часовом формате.The time data type stores time values only, based on a 24-hour clock. Тип данных time имеет диапазон от 00:00:00.0000000 до 23:59:59.9999999 с точностью 100 наносекунд.The time data type has a range of 00:00:00.0000000 through 23:59:59.9999999 with an accuracy of 100 nanoseconds. Значение по умолчанию - 00:00:00.0000000 (полночь).The default value is 00:00:00.0000000 (midnight). Тип данных time поддерживает определяемую пользователем точность в долях секунды, а размер хранения изменяется от 3 до 6 байт в зависимости от указанной точности.The time data type supports user-defined fractional second precision, and the storage size varies from 3 to 6 bytes, based on the precision specified.
datetime2 Тип данных datetime2 объединяет диапазон и точность типов данных date и time в один тип данных.The datetime2 data type combines the range and precision of the date and time data types into a single data type.

Значения по умолчанию и форматы строковых литералов аналогичны значениям, определенным для типов данных date и time.The default values and string literal formats are the same as those defined in the date and time data types.
datetimeoffset Тип данных datetimeoffset обладает всеми характеристиками типа datetime2 с добавлением смещения часового пояса.The datetimeoffset data type has all the features of datetime2 with an additional time zone offset. Смещение часового пояса представлено как [+|-] чч: мм.The time zone offset is represented as [+|-] HH:MM. ЧЧ - это 2 разряда от 00 до 14, представляющие количество часов в смещении часового пояса.HH is 2 digits ranging from 00 to 14 that represent the number of hours in the time zone offset. ММ - это 2 разряда от 00 до 59, представляющие количество дополнительных минут в смещении часового пояса.MM is 2 digits ranging from 00 to 59 that represent the number of additional minutes in the time zone offset. Форматы времени поддерживаются с точностью до 100 наносекунд.Time formats are supported to 100 nanoseconds. Обязательный знак «+» или «-» указывает, нужно ли прибавить смещение часового пояса ко времени в формате UTC (универсальное время или время по Гринвичу) или отнять его, чтобы получить местное время.The mandatory + or - sign indicates whether the time zone offset is added or subtracted from UTC (Universal Time Coordinate or Greenwich Mean Time) to obtain the local time.

Примечание

Дополнительные сведения об использовании ключевого слова Type System Version см. в разделе ConnectionString.For more information about using the Type System Version keyword, see ConnectionString.

Формат даты и порядок датыDate Format and Date Order

Способ синтаксического разбора сервером SQL Server значений даты и времени зависит не только от версии системы типов и версии сервера, но также от установленных на сервере по умолчанию языковых параметров и параметров форматирования.How SQL Server parses date and time values depends not only on the type system version and server version, but also on the server's default language and format settings. Строка даты, подходящая для форматов даты на одном языке, может не распознаваться, если запрос выполняется в подключении, в котором используется другой язык и другой формат даты.A date string that works for the date formats of one language might be unrecognizable if the query is executed by a connection that uses a different language and date format setting.

Инструкция Transact-SQL SET LANGUAGE неявным образом задает значение параметра DATEFORMAT, определяющего порядок компонентов даты.The Transact-SQL SET LANGUAGE statement implicitly sets the DATEFORMAT that determines the order of the date parts. Инструкцию Transact-SQL SET DATEFORMAT можно использовать в подключении для устранения неоднозначности значений даты путем расположения компонентов даты в порядке МДГ, ДМГ, ГМД, ГДМ, МГД или ДГМ.You can use the SET DATEFORMAT Transact-SQL statement on a connection to disambiguate date values by ordering the date parts in MDY, DMY, YMD, YDM, MYD, or DYM order.

Если значение параметра DATEFORMAT для подключения не указано, SQL Server использует связанный с подключением язык по умолчанию.If you do not specify any DATEFORMAT for the connection, SQL Server uses the default language associated with the connection. Например, строка даты '01/02/03' будет интерпретирована как МДГ (2 января 2003 г.), если на сервере установлен английский язык (США), и как ДМГ (1 февраля 2003 г.), если на сервере установлен английский язык (Соединенное Королевство).For example, a date string of '01/02/03' would be interpreted as MDY (January 2, 2003) on a server with a language setting of United States English, and as DMY (February 1, 2003) on a server with a language setting of British English. Год определяется по правилу отсечения двух цифр года SQL Server, которое определяет дату отсечения для выбора века.The year is determined by using SQL Server's cutoff year rule, which defines the cutoff date for assigning the century value. Дополнительные сведения см. в разделе "отсечение двух цифр года" в Электронная документация на SQL Server.For more information, see two digit year cutoff Option in SQL Server Books Online.

Примечание

Формат даты ГДМ не поддерживается при преобразовании из строкового формата в формат date, time, datetime2 или datetimeoffset.The YDM date format is not supported when converting from a string format to date, time, datetime2, or datetimeoffset.

Дополнительные сведения о том, как SQL Server интерпретирует данные даты и времени, см. в разделе использование данных даты и времени в электронной документации по SQL Server 2008.For more information about how SQL Server interprets date and time data, see Using Date and Time Data in SQL Server 2008 Books Online.

Параметры и типы данных даты-времениDate/Time Data Types and Parameters

Для поддержки новых типов данных даты и времени к SqlDbType были добавлены следующие перечисления.The following enumerations have been added to SqlDbType to support the new date and time data types.

  • SqlDbType.Date

  • SqlDbType.Time

  • SqlDbType.DateTime2

  • SqlDbType.DateTimeOffSet

Тип SqlParameter данных можно указать с помощью одного из описанных выше SqlDbType перечислений.You can specify the data type of a SqlParameter by using one of the preceding SqlDbType enumerations.

Примечание

Нельзя задать DbType SqlParameter для свойствазначение.SqlDbType.DateYou cannot set the DbType property of a SqlParameter to SqlDbType.Date.

Также можно указать тип объекта SqlParameter в общей форме, задав для свойства DbType объекта SqlParameter особое значение перечисления DbType.You can also specify the type of a SqlParameter generically by setting the DbType property of a SqlParameter object to a particular DbType enumeration value. Для поддержки типов данных DbType и datetime2 к свойству datetimeoffset были добавлены следующие значения перечисления.The following enumeration values have been added to DbType to support the datetime2 and datetimeoffset data types:

  • DbType.DateTime2DbType.DateTime2

  • DbType.DateTimeOffsetDbType.DateTimeOffset

Новые перечисления дополняют перечисления Date, Time и DateTime из предыдущих версий .NET Framework.These new enumerations supplement the Date, Time, and DateTime enumerations, which existed in earlier versions of the .NET Framework.

Тип поставщика данных платформы .NET Framework объекта параметра выводится из значения типа платформы .NET Framework объекта параметра или из свойства DbType объекта параметра.The .NET Framework data provider type of a parameter object is inferred from the .NET Framework type of the value of the parameter object, or from the DbType of the parameter object. Для поддержки новых типов данных даты и времени не было представлено новых типов данных System.Data.SqlTypes.No new System.Data.SqlTypes data types have been introduced to support the new date and time data types. В следующей таблице описаны сопоставления между типами данных даты и времени SQL Server 2008 и типами данных CLR.The following table describes the mappings between the SQL Server 2008 date and time data types and the CLR data types.

Тип данных SQL ServerSQL Server data type Тип платформы .NET Framework.NET Framework type System.Data.SqlDbTypeSystem.Data.SqlDbType System.Data.DbTypeSystem.Data.DbType
datedate System.DateTimeSystem.DateTime ДатаDate ДатаDate
timetime System.TimeSpanSystem.TimeSpan TimeTime TimeTime
datetime2datetime2 System.DateTimeSystem.DateTime DateTime2DateTime2 DateTime2DateTime2
datetimeoffsetdatetimeoffset System.DateTimeOffsetSystem.DateTimeOffset DateTimeOffsetDateTimeOffset DateTimeOffsetDateTimeOffset
datetimedatetime System.DateTimeSystem.DateTime DateTimeDateTime DateTimeDateTime
smalldatetimesmalldatetime System.DateTimeSystem.DateTime DateTimeDateTime DateTimeDateTime

Свойства SqlParameterSqlParameter Properties

В приведенной ниже таблице описаны свойства SqlParameter, соответствующие типам данных даты и времени.The following table describes SqlParameter properties that are relevant to date and time data types.

Свойство.Property ОписаниеDescription
IsNullable Возвращает или задает значение, указывающее, можно ли использовать значения NULL.Gets or sets whether a value is nullable. При отправке на сервер параметра со значением NULL необходимо указывать значение DBNull, а не значение null (Nothing в Visual Basic).When you send a null parameter value to the server, you must specify DBNull, rather than null (Nothing in Visual Basic). Дополнительные сведения о значении NULL базы данных см. в разделе Handling Null Values.For more information about database nulls, see Handling Null Values.
Precision Возвращает или задает максимальное количество разрядов, используемых для представления значения.Gets or sets the maximum number of digits used to represent the value. Этот параметр пропускается для типов данных даты и времени.This setting is ignored for date and time data types.
Scale Возвращает или задает число десятичных разрядов, до которого разрешается временная часть значения для Time, DateTime2и DateTimeOffset.Gets or sets the number of decimal places to which the time portion of the value is resolved for Time, DateTime2,and DateTimeOffset. Значение по умолчанию — 0, означающее, что фактический масштаб выводится из значения и отправляется на сервер.The default value is 0, which means that the actual scale is inferred from the value and sent to the server.
Size Пропускается для типов данных даты и времени.Ignored for date and time data types.
Value Возвращает или задает значение параметра.Gets or sets the parameter value.
SqlValue Возвращает или задает значение параметра.Gets or sets the parameter value.

Примечание

Значения времени, меньшие нуля или большие либо равные 24 часам, приводят к вызову исключения ArgumentException.Time values that are less than zero or greater than or equal to 24 hours will throw an ArgumentException.

Создание параметровCreating Parameters

Объект SqlParameter можно создать с помощью конструктора либо путем добавления этого объекта в коллекцию SqlCommandParameters путем вызова метода Add класса SqlParameterCollection.You can create a SqlParameter object by using its constructor, or by adding it to a SqlCommandParameters collection by calling the Add method of the SqlParameterCollection. Метод Add принимает в качестве входных данных либо аргументы конструктора, либо существующий объект параметра.The Add method will take as input either constructor arguments or an existing parameter object.

В следующих подразделах данного раздела приведены примеры указания параметров даты и времени.The next sections in this topic provide examples of how to specify date and time parameters. Дополнительные примеры работы с параметрами см. в разделе Настройка параметров и типов данных параметров и параметров DataAdapter.For additional examples of working with parameters, see Configuring Parameters and Parameter Data Types and DataAdapter Parameters.

Пример работы с типом dateDate Example

В нижеприведенном примере кода показано указание параметра date.The following code fragment demonstrates how to specify a date parameter.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@Date";  
parameter.SqlDbType = SqlDbType.Date;  
parameter.Value = "2007/12/1";  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@Date"  
parameter.SqlDbType = SqlDbType.Date  
parameter.Value = "2007/12/1"  

Пример работы с типом timeTime Example

В нижеприведенном примере кода показано указание параметра time.The following code fragment demonstrates how to specify a time parameter.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@time";  
parameter.SqlDbType = SqlDbType.Time;  
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@Time"  
parameter.SqlDbType = SqlDbType.Time  
parameter.Value = DateTime.Parse("23:59:59").TimeOfDay;  

Пример работы с типом Datetime2Datetime2 Example

В приведенном ниже примере кода демонстрируется указание параметра datetime2, содержащего компоненты даты и времени.The following code fragment demonstrates how to specify a datetime2 parameter with both the date and time parts.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@Datetime2";  
parameter.SqlDbType = SqlDbType.DateTime2;  
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@Datetime2"  
parameter.SqlDbType = SqlDbType.DateTime2  
parameter.Value = DateTime.Parse("1666-09-02 1:00:00");  

Пример работы с типом DateTimeOffSetDateTimeOffSet Example

В приведенном ниже примере кода демонстрируется указание параметра DateTimeOffSet, содержащего дату, время и смещение часового пояса, равное 0.The following code fragment demonstrates how to specify a DateTimeOffSet parameter with a date, a time, and a time zone offset of 0.

SqlParameter parameter = new SqlParameter();  
parameter.ParameterName = "@DateTimeOffSet";  
parameter.SqlDbType = SqlDbType.DateTimeOffSet;  
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");  
Dim parameter As New SqlParameter()  
parameter.ParameterName = "@DateTimeOffSet"  
parameter.SqlDbType = SqlDbType.DateTimeOffSet  
parameter.Value = DateTimeOffset.Parse("1666-09-02 1:00:00+0");  

Метод AddWithValueAddWithValue

Указать параметры также можно с помощью метода AddWithValue класса SqlCommand, как показано в приведенном ниже фрагменте кода.You can also supply parameters by using the AddWithValue method of a SqlCommand, as shown in the following code fragment. Однако метод AddWithValue не позволяет указать для параметра значения свойств DbType и SqlDbType.However, the AddWithValue method does not allow you to specify the DbType or SqlDbType for the parameter.

command.Parameters.AddWithValue(   
    "@date", DateTimeOffset.Parse("16660902"));  
command.Parameters.AddWithValue( _  
    "@date", DateTimeOffset.Parse("16660902"))  

Параметр может сопоставляться dateс типом данных datetime, или datetime2 на сервере. @dateThe @date parameter could map to a date, datetime, or datetime2 data type on the server. При работе с новыми типами данных datetime необходимо явным образом присвоить свойству SqlDbType параметра тип данных экземпляра.When working with the new datetime data types, you must explicitly set the parameter's SqlDbType property to the data type of the instance. Использование Variant или неявных значений параметра может привести к проблемам с обратной совместимостью для типов данных datetime и smalldatetime.Using Variant or implicitly supplying parameter values can cause problems with backward compatibility with the datetime and smalldatetime data types.

В приведенной ниже таблице показано, какие типы SqlDbTypes выводятся из каких типов среды CLR.The following table shows which SqlDbTypes are inferred from which CLR types:

Тип CLRCLR type Выводимый тип SqlDbTypeInferred SqlDbType
DateTimeDateTime SqlDbType.DateTimeSqlDbType.DateTime
TimeSpanTimeSpan SqlDbType.TimeSqlDbType.Time
DateTimeOffsetDateTimeOffset SqlDbType.DateTimeOffsetSqlDbType.DateTimeOffset

Извлечение данных даты и времениRetrieving Date and Time Data

В следующей таблице описаны методы, используемые для извлечения значений даты и времени SQL Server 2008.The following table describes methods that are used to retrieve SQL Server 2008 date and time values.

Метод SqlClientSqlClient method ОписаниеDescription
GetDateTime Возвращает значение указанного столбца в виде структуры DateTime.Retrieves the specified column value as a DateTime structure.
GetDateTimeOffset Возвращает значение указанного столбца в виде структуры DateTimeOffset.Retrieves the specified column value as a DateTimeOffset structure.
GetProviderSpecificFieldType Возвращает базовый тип поля, зависящий от поставщика.Returns the type that is the underlying provider-specific type for the field. Возвращает те же типы, что и метод GetFieldType для новых типов даты и времени.Returns the same types as GetFieldType for new date and time types.
GetProviderSpecificValue Возвращает значение указанного столбца.Retrieves the value of the specified column. Возвращает те же типы, что и GetValue для новых типов даты и времени.Returns the same types as GetValue for the new date and time types.
GetProviderSpecificValues Извлекает значения из указанного массива.Retrieves the values in the specified array.
GetSqlString Возвращает значение столбца в виде SqlString.Retrieves the column value as a SqlString. Если данные нельзя выразить в виде объекта InvalidCastException, возникнет исключение SqlString.An InvalidCastException occurs if the data cannot be expressed as a SqlString.
GetSqlValue Возвращает данные столбца в качестве значений по умолчанию SqlDbType.Retrieves column data as its default SqlDbType. Возвращает те же типы, что и GetValue для новых типов даты и времени.Returns the same types as GetValue for the new date and time types.
GetSqlValues Извлекает значения из указанного массива.Retrieves the values in the specified array.
GetString Возвращает значение столбца в виде строки, если Type System Version имеет значение «SQL Server 2005».Retrieves the column value as a string if the Type System Version is set to SQL Server 2005. Если данные нельзя представить в виде строки, то возникнет исключение InvalidCastException.An InvalidCastException occurs if the data cannot be expressed as a string.
GetTimeSpan Возвращает значение указанного столбца в виде структуры TimeSpan.Retrieves the specified column value as a TimeSpan structure.
GetValue Возвращает значение указанного столбца в виде базового типа CLR.Retrieves the specified column value as its underlying CLR type.
GetValues Возвращает значения столбца в массив.Retrieves column values in an array.
GetSchemaTable Возвращает объект DataTable, описывающий метаданные результирующего набора.Returns a DataTable that describes the metadata of the result set.

Примечание

Новые типы даты и времени SqlDbTypes не поддерживаются для кода, выполняющегося в SQL Server внутри процесса.The new date and time SqlDbTypes are not supported for code that is executing in-process in SQL Server. При передаче на сервер одного из этих типов возникает исключение.An exception will be raised if one of these types is passed to the server.

Указание значений даты и времени в виде литераловSpecifying Date and Time Values as Literals

Типы данных даты и времени можно указать с помощью множества различных форматов строк литералов, которые SQL Server затем оценивает во время выполнения, преобразуя их во внутренние структуры даты и времени.You can specify date and time data types by using a variety of different literal string formats, which SQL Server then evaluates at run time, converting them to internal date/time structures. SQL Server распознает данные даты и времени, заключенные в апострофы (').SQL Server recognizes date and time data that is enclosed in single quotation marks ('). В приведенных ниже примерах демонстрируются некоторые форматы.The following examples demonstrate some formats:

  • Алфавитные форматы даты, например 'October 15, 2006'.Alphabetic date formats, such as 'October 15, 2006'.

  • Численные форматы даты, например '10/15/2006'.Numeric date formats, such as '10/15/2006'.

  • Строковые форматы без разделителей, например строка '20061015', которую можно интерпретировать как 15 октября 2006 г. при использовании стандартного формата даты ISO.Unseparated string formats, such as '20061015', which would be interpreted as October 15, 2006 if you are using the ISO standard date format.

Примечание

Полную документацию по всем литеральным строковым форматам и другим возможностям типов данных даты и времени можно найти в электронной документации по SQL Server.You can find complete documentation for all of the literal string formats and other features of the date and time data types in SQL Server Books Online.

Значения времени, меньшие нуля или большие либо равные 24 часам, приводят к вызову исключения ArgumentException.Time values that are less than zero or greater than or equal to 24 hours will throw an ArgumentException.

Ресурсы электронной документации по SQL Server 2008Resources in SQL Server 2008 Books Online

Дополнительные сведения о работе со значениями даты и времени в SQL Server 2008 см. в приведенных ниже ресурсах электронной документации по SQL Server 2008.For more information about working with date and time values in SQL Server 2008, see the following resources in SQL Server 2008 Books Online.

РазделTopic ОписаниеDescription
Типы данных и функции даты и времени (Transact-SQL)Date and Time Data Types and Functions (Transact-SQL) Приводятся общие сведения обо всех типах данных и функциях даты и времени в языке Transact-SQL.Provides an overview of all Transact-SQL date and time data types and functions.
Использование данных даты и времениUsing Date and Time Data Приводятся сведения о типах данных даты и времени, функциях для работы с этими типами данных и примеры их использования.Provides information about the date and time data types and functions, and examples of using them.
Типы данных (Transact-SQL)Data Types (Transact-SQL) Описываются системные типы данных в SQL Server 2008.Describes system data types in SQL Server 2008.

См. такжеSee also