共用方式為


繫結和轉換 (OLE DB)

本節討論如何在 和 datetimeoffset 值之間datetime轉換。 本節所述的轉換已由 OLE DB 提供,或是 OLE DB 的一致延伸模組。

OLE DB 中日期和時間的常值和字串格式通常會遵循 ISO,且不相依於客戶端地區設定。 其中一個例外狀況是DBTYPE_DATE,其中標準為 OLE Automation。 不過,由於 SQL Server Native Client 只會在數據傳送至用戶端或從客戶端之間轉換類型,因此應用程式無法強制 SQL Server Native Client 在DBTYPE_DATE與字元串格式之間轉換。 否則,字串會使用下列格式(方括弧中的文字表示選擇性專案):

  • datetimeoffset 字串格式datetime為:

    yyyy-毫米-dd[ hhmmss[.9999999][ ?? hhmm]]

  • 字串格式 time 為:

    hhmmss[.9999999]

  • 字串格式 date 為:

    yyyy-毫米-dd

備註

舊版的 SQL Server Native Client 和 SQLOLEDB 實作 OLE 轉換,以防標準轉換失敗。 因此,SQL Server Native Client 10.0 和更新版本所執行的一些轉換與 OLE DB 規格不同。

來自字串的轉換允許空格符和欄位寬度的彈性。 如需詳細資訊,請參閱 OLE DB 日期和時間改善的數據類型支援中的<數據格式:字串和常值>一節。

以下是一般轉換規則:

  • 當字串轉換成日期/時間類型時,字串會先剖析為 ISO 常值。 如果失敗,字串會剖析為具有時間元件的 OLE 日期常值。

  • 如果沒有時間,但接收者可以儲存時間,時間會設定為零。 如果沒有日期,但接收者可以儲存日期,則日期會設定為使用 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)