変換 (OLE DB)
適用対象: SQL Server Azure SQL データベース Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
このセクションでは、datetime 値と datetimeoffset 値の間で変換を行う方法について説明します。 ここで説明する変換は、OLE DB によって既に提供されているか、OLE DB の一貫性がある拡張機能です。
OLE DB における日付と時刻のリテラルと文字列の形式は、通常 ISO に従うため、クライアントのロケールに依存しません。 これには、標準が OLE オートメーションである DBTYPE_DATE という例外があります。 ただし、OLE DB Driver for SQL Server では、クライアントとの間でデータがやりとりされる際に型の変換しか実行されないため、アプリケーションでは、OLE DB Driver for SQL Server に DBTYPE_DATE と文字列形式の変換を強制することができません。 それ以外の場合、文字列では次の形式を使用します (角かっこに囲まれたテキストは省略可能な要素を示します)。
datetime および datetimeoffset 文字列の形式は次のとおりです。
yyyy-mm-dd[ hh:mm:ss[.9999999][ ± hh:mm]]
time 型の文字列の形式は次のとおりです。
hh:mm:ss[.9999999]
date 文字列の形式は次のとおりです。
yyyy-mm-dd
注意
以前のバージョンの SQL Server Native Client および SQLOLEDB では、標準の変換が失敗した場合に備えて OLE 変換が実装されていました。 OLE DB Driver for SQL Server は動作が SQL Server Native Client と同じです。 このため、OLE DB Driver for SQL Server によって実行された変換には、OLE DB 仕様と異なるものがあります。
文字列からの変換では、空白文字やフィールドの幅を柔軟に処理できます。 詳細については、「OLE DB の日付/時刻の強化に対するデータ型のサポート」の「データ フォーマット: 文字列とリテラル」セクションをご覧ください。
一般的な変換規則を次に示します。
文字列を日付型または時刻型に変換すると、文字列はまず ISO リテラルとして解析されます。 これが失敗すると、文字列は OLE 日付リテラルとして解析されます。OLE 日付リテラルには時刻要素があります。
時刻が存在しなくても受信側が時刻を格納できる場合、時刻は 0 に設定されます。 日付が存在しなくても受信側が日付を格納できる場合、ISO 変換を使用すると日付は現在の日付に設定され、OLE 変換を使用すると日付は 1899-12-30 に設定されます。
クライアントが使用しているデータ型にタイム ゾーンが存在しなくても、サーバーがタイム ゾーンを格納できる場合、クライアントのデータはクライアントのタイム ゾーンで表されていると仮定されます。
サーバーにタイム ゾーンが存在しなくても、クライアントにタイム ゾーン情報がある場合、UTC のタイム ゾーンが使用されます。 これはサーバーの動作とは異なります。
時刻が存在しても受信側が時刻を格納できない場合、時刻要素は無視されます。
日付が存在しても受信側が日付を格納できない場合、日付要素は無視されます。
クライアントからサーバーへの変換時に秒または秒の小数部の切り捨てが発生すると、DB_E_ERRORSOCCURRED が返され、状態 DBSTATUS_E_DATAOVERFLOW が設定されます。
サーバーからクライアントへの変換時に秒または秒の小数部の切り捨てが発生すると、DBSTATUS_S_TRUNCATED が設定されます。
このセクションの内容
クライアントからサーバーへの変換
OLE DB Driver for SQL Server 2008 (10.0.x) を使用して作成されたクライアント アプリケーションと、以降のバージョンの間で実行される日付または時刻の変換について説明します。
サーバーからクライアントへの変換
SQL Server 2008 (10.0.x) 以降と OLE DB Driver for SQL Server を使用して作成されたクライアント アプリケーションとの間で実行される日付または時刻の変換について説明します。