次の方法で共有


バインドと変換 (OLE DB)

ここでは、datetime 値と datetimeoffset 値との間で変換を行う方法について説明します。 ここで説明する変換は、OLE DB によって既に提供されているか、OLE DB の一貫性がある拡張機能です。

OLE DB における日付と時刻のリテラルと文字列の形式は、通常 ISO に従うため、クライアントのロケールに依存しません。 これには、標準が OLE オートメーションである DBTYPE_DATE という例外があります。 ただし、SQL Server Native Client では、クライアントとの間でデータが転送される際に型の変換しか実行されないため、アプリケーションでは、SQL Server Native Client に 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 変換が実装されていました。 このため、SQL Server Native Client 10.0 以降によって実行された変換には、OLE DB 仕様と異なるものがあります。

文字列からの変換では、空白文字やフィールドの幅を柔軟に処理できます。 詳細については、「OLE DB の日付/時刻の強化に対するデータ型のサポート」の「データ形式 : 文字列とリテラル」を参照してください。

一般的な変換規則を次に示します。

  • 文字列を日付型または時刻型に変換すると、文字列はまず ISO リテラルとして解析されます。 これが失敗すると、文字列は OLE 日付リテラルとして解析されます。OLE 日付リテラルには時刻要素があります。

  • 時刻が存在しなくても受信側が時刻を格納できる場合、時刻は 0 に設定されます。 日付が存在しなくても受信側が日付を格納できる場合、ISO 変換を使用すると日付は現在の日付に設定され、OLE 変換を使用すると日付は 1899-12-30 に設定されます。

  • クライアントが使用しているデータ型にタイム ゾーンが存在しなくても、サーバーがタイム ゾーンを格納できる場合、クライアントのデータはクライアントのタイム ゾーンで表されていると仮定されます。

  • サーバーにタイム ゾーンが存在しなくても、クライアントにタイム ゾーン情報がある場合、UTC のタイム ゾーンが使用されます。 これはサーバーの動作とは異なります。

  • 時刻が存在しても受信側が時刻を格納できない場合、時刻要素は無視されます。

  • 日付が存在しても受信側が日付を格納できない場合、日付要素は無視されます。

  • クライアントからサーバーへの変換時に秒または秒の小数部の切り捨てが発生すると、DB_E_ERRORSOCCURRED が返され、状態 DBSTATUS_E_DATAOVERFLOW が設定されます。

  • サーバーからクライアントへの変換時に秒または秒の小数部の切り捨てが発生すると、DBSTATUS_S_TRUNCATED が設定されます。

このセクションの内容

  • クライアントからサーバーへの変換
    SQL Server Native Client OLE DB を使用して作成されたクライアント アプリケーションと SQL Server 2008 (以降) との間で実行される日付または時刻の変換について説明します。

  • サーバーからクライアントへの変換
    SQL Server 2008 (以降) と SQL Server Native Client OLE DB を使用して作成されたクライアント アプリケーションとの間で実行される日付または時刻の変換について説明します。

関連項目

概念

日付/時刻の強化 (OLE DB)