共用方式為


從客戶端到伺服器執行的轉換

本主題描述使用 SQL Server Native Client OLE DB 和 SQL Server 2008(或更新版本)撰寫的用戶端應用程式之間執行的日期/時間轉換。

轉換次數

本主題描述在用戶端上進行的轉換。 如果用戶端為與伺服器上定義的參數指定小數秒精確度,則客戶端轉換可能會在伺服器允許作業成功的情況下造成失敗。 特別是,用戶端會將小數秒的任何截斷視為錯誤,而 SQL Server 會將時間值四捨五入為最接近的整秒。

如果未呼叫 ICommandWithParameters::SetParameterInfo,DBTYPE_DBTIMESTAMP系結會轉換成 ,就像是 datetime2一樣。

自->

寄件者
DBDATE (日期) DBTIME (時間) DBTIME2 (時間) DBTIMESTAMP (smalldatetime) DBTIMESTAMP (datetime) DBTIMESTAMP (datetime2) DBTIMESTAMPOFFSET (datetimeoffset) STR WSTR SQLVARIANT

(sql_variant)
日期 1,2 1,3,4 4,12 1,12 1,12 1,12 1,5, 12 1,12 1,12 1,12

datetime2(0)
DBDATE 1 - - 1,6 1,6 1,6 1,5, 6 1,10 1,10 1

日期
DBTIME - 1 1 1,7 1,7 1,7 1,5, 7 1,10 1,10 1

時間(0)
DBTIME2 - 1,3 1 1,7,10,14 1,7,10,15 1,7,10 1,5,7,10 1,10,11 1,10,11 1

時間(7)
DBTIMESTAMP 1,2 1,3,4 1,4,10 1,10,14 1,10,15 1,10 1,5,10 1,10,11 1,10,11 1,10

datetime2(7)
資料庫時間戳偏移量 1,2,8 1,3,4,8 1,4,8,10 1,8,10,14 1,8,10,15 1,8,10 1,10 1,10,11 1,10,11 1,10

datetimeoffset(7)
FILETIME 1,2 1,3,4 1,4,13 1,13 1,13 1,13 1,5,13 1,13 1,10 1,13

datetime2(3)
位元組 - - - - - - - N/A N/A N/A
變體 1 1 1 1,10 1,10 1,10 1,10 N/A N/A 1,10
SSVARIANT 1,16 1,16 1,16 1,10,16 1,10,16 1,10,16 1,10,16 N/A N/A 1,16
BSTR 1,9 1,9 1,9,10 1,9,10 1,9,10 1,9,10 1,9,10 N/A N/A N/A
STR 1,9 1,9 1,9,10 1,9,10 1,9,10 1,9,10 1,9,10 N/A N/A N/A
WSTR 1,9 1,9 1,9,10 1,9,10 1,9,10 1,9,10 1,9,10 N/A N/A N/A

符號的索引鍵

象徵 意義
- 不支援轉換。 如果在呼叫 IAccessor::CreateAccessor 時驗證系結,DBBINDSTATUS_UPSUPPORTEDCONVERSION會在 rgStatus 中傳回。 延遲存取子驗證時,會設定DBSTATUS_E_BADACCESSOR。
N/A 不適用。
1 如果提供的數據無效,則會設定DBSTATUS_E_CANTCONVERTVALUE。 輸入數據會在套用轉換之前進行驗證,因此即使後續轉換會忽略元件,轉換仍必須有效才能成功。
2 系統會忽略時間欄位。
3 小數秒必須是零或設定DBSTATUS_E_DATAOVERFLOW。
4 忽略日期元件。
5 時區設定為用戶端的時區設定。
6 時間會設定為零。
7 日期會設定為目前的日期。
8 時間會轉換成UTC。 如果此轉換期間發生錯誤,則會設定DBSTATUS_E_CANTCONVERTVALUE。
9 字串會剖析為 ISO 常值,並轉換成目標類型。 如果失敗,字串會剖析為 OLE 日期常值(它也具有時間元件),並從 OLE 日期 (DBTYPE_DATE) 轉換為目標類型。

如果目標類型是 DBTIMESTAMP、 smalldatetimedatetimedatetime2,字串必須符合日期、時間或常值語法 datetime2 ,或 OLE 所辨識的語法。 如果字串是日期常值,則所有時間元件都會設定為零。 如果字串是時間常值,日期會設定為目前的日期。

對於所有其他目標類型,字串必須符合目標型別常值的語法。
10 如果發生數據遺失的小數秒截斷,則會設定DBSTATUS_E_DATAOVERFLOW。 針對字串轉換,只有在字串符合 ISO 語法時,才能進行溢位檢查。 如果字串是 OLE 日期常值,則會四捨五入小數秒。

若要從 DBTIMESTAMP (datetime) 轉換為 smalldatetime SQL Server Native Client,將會以無訊息方式截斷秒值,而不是引發DBSTATUS_E_DATAOVERFLOW錯誤。
11 根據下表,小數秒位數(小數字數)是從目的地數據行的大小決定。 對於大於資料表中範圍的資料行大小,會隱含小數位數 9。 此轉換應該最多允許九個小數秒位數,也就是 OLE DB 所允許的最大值。

不過,如果來源類型為 DBTIMESTAMP,而小數秒為零,則不會產生小數秒位數或小數點。 此行為可確保使用舊版 OLE DB 提供者所開發之應用程式的回溯相容性。

~0 的數據行大小表示 OLE DB 中無限制的大小(9 位數,除非套用 DBTIMESTAMP 的 3 位數規則)。

DBTIME2 - 8, 10..18 (字元長度):0, 1..9 (縮放)

DBTIMESTAMP - 19, 21..29 (字元長度):0, 1..9 (縮放)

DBTIMESTAMPOFFSET - 26, 28..36 (字元長度):0, 1..9 (縮放)
12 SQL Server 2008 for DBTYPE_DATE 之前的轉換語意會維持。 小數秒會截斷為零。
13 SQL Server 2008 for DBTYPE_FILETIME 之前的轉換語意會維持。 如果您使用 Windows FileTimeToSystemTime API,小數秒精確度會限制為 1 毫秒。
14 會維護 SQL Server 2008 smalldatetime 之前的轉換語意。 秒數設定為零。
15 會維護 SQL Server 2008 datetime 之前的轉換語意。 秒會四捨五入為秒的最接近第 300 個。
16 內嵌在 SSVARIANT 用戶端結構中的值轉換行為,與未內嵌在 SSVARIANT 用戶端結構中的相同值和型別的行為相同。

另請參閱

繫結和轉換 (OLE DB)