日付と時刻のデータ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 Service Pack (SP) 1 以降では、.NET Framework Data Provider for 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 SP1 以降をインストールする必要があります。You must install the .NET Framework 3.5 SP1 (or later) to use these new features with SqlClient.

SQL Server 2008 より前のバージョンの SQL Server では、日付と時刻に使用できるデータ型には datetimesmalldatetime の 2 つしかありませんでした。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. もう 1 つの制限は、これらの古いデータ型はタイム ゾーンを処理できないことです。その結果、複数のタイム ゾーンから送られてくるデータの処理が難しくなっています。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. 次の表は、バージョン別の日付と時刻のデータに関する初歩的なトピックの一覧です。The following table lists the version-specific entry-level topics for date and time data.

SQL Server オンライン ブックSQL Server Books Online

  1. 日付と時刻のデータの使用Using Date and Time Data

SQL Server 2008 で導入された日付/時刻データ型Date/Time Data Types Introduced in SQL Server 2008

次の表は、新しい日付と時刻のデータ型の説明です。The following table describes the new date and time data types.

SQL Server のデータ型SQL Server data type 説明Description
date データ型 date の範囲は 01 年 1 月 1 日から 9999 年 12 月 31 日までで、精度は 1 日です。The date data type has a range of January 1, 01 through December 31, 9999 with an accuracy of 1 day. 既定値は 1900 年 1 月 1 日です。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 (午前 0 時) です。The default value is 00:00:00.0000000 (midnight). time データ型はユーザー定義による 1 秒未満の時間の有効桁数をサポートし、記憶領域のサイズは、指定された有効桁数に応じて 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. タイムゾーンオフセットは、[+|-] HH: MM として表されます。The time zone offset is represented as [+|-] HH:MM. HH は、タイム ゾーン オフセットの時間数を表す 00 ~ 14 の 2 桁の数字です。HH is 2 digits ranging from 00 to 14 that represent the number of hours in the time zone offset. MM は、タイム ゾーン オフセットの付加的な分数を表す 0 ~ 59 の 2 桁の数字です。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. 日付構成要素の表記順序が MDY、DMY、YMD、YDM、MYD、DYM のいずれであるかを明確にするには、接続で 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' は、言語が United States English に設定されているサーバーでは MDY (January 2, 2003) として、British English に設定されているサーバーでは DMY (February 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 オンラインブックの2 桁表記の年の切り捨てオプションに関する説明を参照してください。For more information, see two digit year cutoff Option in SQL Server Books Online.

注意

YDM 日付書式は、文字列形式から datetimedatetime2、または 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 データ型とパラメーター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 SqlDbType.Dateをに設定することはできません。 SqlParameterYou 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

これらの新しい列挙値は、以前のバージョンの .NET Framework に存在した DateTime、および DateTime の各列挙値を補います。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. 新しい date 型と time 型をサポートするための新しい 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 の date 型/time 型と CLR のデータ型のマッピングを次の表に示します。The following table describes the mappings between the SQL Server 2008 date and time data types and the CLR data types.

SQL Server のデータ型SQL Server data type .NET Framework 型.NET Framework type System.Data.SqlDbTypeSystem.Data.SqlDbType System.Data.DbTypeSystem.Data.DbType
datedate System.DateTimeSystem.DateTime 日付Date 日付Date
時間time System.TimeSpanSystem.TimeSpan 時刻Time 時刻Time
datetime2datetime2 System.DateTimeSystem.DateTime DateTime2DateTime2 DateTime2DateTime2
datetimeoffsetdatetimeoffset System.DateTimeOffsetSystem.DateTimeOffset DateTimeOffsetDateTimeOffset DateTimeOffsetDateTimeOffset
datetimedatetime System.DateTimeSystem.DateTime DateTimeDateTime DateTimeDateTime
smalldatetimesmalldatetime System.DateTimeSystem.DateTime DateTimeDateTime DateTimeDateTime

SqlParameter プロパティSqlParameter 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 (Visual Basic の場合は null) ではなく、Nothing を指定する必要があります。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. この設定値は date データ型と time データ型では無視されます。This setting is ignored for date and time data types.
Scale TimeDateTime2およびの値の時間部分が解決される小数点以下の桁数を取得または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 date データ型と time データ型では無視されます。Ignored for date and time data types.
Value パラメーター値を取得または設定します。Gets or sets the parameter value.
SqlValue パラメーター値を取得または設定します。Gets or sets the parameter value.

注意

時刻の値が 0 と 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 メソッドを呼び出して、AddSqlParameterCollection コレクションにそれを追加することによって作成することもできます。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.

Date の例Date 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"  

Time の例Time 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;  

Datetime2 の例Datetime2 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");  

DateTimeOffSet の例DateTimeOffSet 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

次のコード フラグメントのように、AddWithValueSqlCommand メソッドを使用してパラメーターを渡すこともできます。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 dateは、サーバー上の、 datetime、またdatetime2はデータ型にマップできます。The @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:

CLR 型CLR 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.

SqlClient のメソッドSqlClient 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. 新しい date 型および time 型については、GetFieldType と同じ型が返されます。Returns the same types as GetFieldType for new date and time types.
GetProviderSpecificValue 指定された列の値を取得します。Retrieves the value of the specified column. 新しい date 型および time 型については、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. 新しい date 型および time 型については、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. そのような型の 1 つがサーバーに渡されると、例外が発生します。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' など)。これは ISO 規格の日付書式では 2006 年 10 月 15 日と解釈されます。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.

時刻の値が 0 と 24 の間にない場合は、ArgumentException がスローされます。Time values that are less than zero or greater than or equal to 24 hours will throw an ArgumentException.

SQL Server 2008 オンライン ブックの関連トピックResources 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