次の方法で共有


バインドと変換 (OLE DB)

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

OLE DB における日付と時刻のリテラルと文字列の形式は、通常 ISO に従うため、クライアントのロケールに依存しません。 これには、標準が OLE オートメーションである DBTYPE_DATE という例外があります。 ただし、SQL Server Native Clientはデータがクライアントとの間で送受信される場合にのみ型間で変換されるため、アプリケーションがDBTYPE_DATE形式と文字列形式の間で変換SQL Server Native Clientを強制する方法はありません。 それ以外の場合、文字列では次の形式を使用します (角かっこに囲まれたテキストは省略可能な要素を示します)。

  • datetime 型の文字列と datetimeoffset 型の文字列の形式は次のとおりです。

    Yyyy-ミリメートル-dd[ hh:mm:ss[.9999999][?? hh:mm]]

  • time 型の文字列の形式は次のとおりです。

    hh:mm:ss[.9999999]

  • date 型の文字列の形式は次のとおりです。

    yyyy-mm-dd

Note

以前のバージョンの 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 が設定されます。

このセクションの内容

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

サーバーからクライアントへの変換
SQL SERVER 2008 (またはそれ以降) と OLE DB で記述されたクライアント アプリケーションの間で実行される日付/時刻変換SQL Server Native Client説明します。

参照

日付と時刻の強化機能 (OLE DB)