Share via


SQL Server Native Client Conversions (OLE DB)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

  • datetimedatetimeoffset 字串的格式為:

    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。

本節內容

從用戶端到伺服器執行的轉換
描述以 SQL Server Native Client OLE DB 和 SQL Server 2008 (10.0.x) (或更新版本) 撰寫的用戶端應用程式之間執行的日期/時間轉換。

從伺服器到用戶端執行的轉換
描述在 SQL Server 2008 (10.0.x) 或更新版本與以 SQL Server Native Client OLE DB 撰寫的用戶端應用程式之間執行的日期/時間轉換。

另請參閱

日期和時間改善 (OLE DB)