本節討論如何在 和 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[ hh:mm:ss[.9999999][ ?? hh:mm]]
字串格式
time為:hh:mm:ss[.9999999]
字串格式
date為:yyyy-毫米-dd
備註
舊版的 SQL Server Native Client 和 SQLOLEDB 實作 OLE 轉換,以防標準轉換失敗。 因此,SQL Server Native Client 10.0 和更新版本所執行的一些轉換與 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 撰寫的用戶端應用程式之間執行的日期/時間轉換。