共用方式為


繫結和轉換 (OLE DB)

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

在 OLE DB 中,日期和時間之常值和字串的格式通常會遵循 ISO,而且不會相依於用戶端地區設定。有一個例外是 DBTYPE_DATE,其中的標準為 OLE Automation。不過,由於資料在用戶端來回傳輸時,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 日期常值。

  • 如果沒有任何時間存在,但是接收者可以儲存時間,則時間會設定為零。如果沒有任何日期存在,但是接收者可以儲存日期,使用 ISO 轉換時,日期會設定為目前的日期,而使用 OLE 轉換時,則會設定為 1899-12-30。

  • 如果在資料類型中沒有用戶端所使用的時區存在,但是伺服器可以儲存時區,則會假設用戶端上的資料位於用戶端的時區中。

  • 如果在伺服器上沒有任何時區存在,但是用戶端擁有時區資訊,則會假設 UTC 時區。這與伺服器行為不同。

  • 如果有時間存在,但是接收者無法儲存時間,則會忽略時間元件。

  • 如果有日期存在,但是接收者無法儲存日期,則會忽略日期元件。

  • 如果在從用戶端轉換為伺服器時發生秒或毫秒的截斷,就會傳回 DB_E_ERRORSOCCURRED,並設定 DBSTATUS_E_DATAOVERFLOW 狀態。

  • 如果在從伺服器轉換為用戶端時發生秒或毫秒的截斷,就會設定 DBSTATUS_S_TRUNCATED。

本節內容