[英]How to get SQL Server DateTime2 field in ODBC native client
我有一張如下圖所示的表格
CREATE TABLE [dbo].[MyTable](
[tagname] [nvarchar(30)] NOT NULL,
[date] [datetime2] NOT NULL
)
我在 c++ 的客戶端使用以下代碼來獲取標簽日期
TIMESTAMP_STRUCT ts;
SQLLEN cbhiredate;
if (!SQL_SUCCEEDED(SQLGetData(hStmt, 2, SQL_C_TIMESTAMP, &ts, sizeof(TIMESTAMP_STRUCT), &cbhiredate)))
在大多數情況下它工作正常,但在某些情況下,日期毫秒值正在四舍五入。 例如,如果 SQL 表中的日期值為 2020/01/11 17:15:38.6850000,則在使用上述查詢獲取時,客戶端代碼中的日期值將更改為 2020/01/11 17:15:38.686。
從 SQL 服務器獲取數據時我做錯了什么嗎? SQL Server 2012 SP4 正在發生這種情況。
問題是您的 datetime2 數據類型的精度為 100ns - 您將該值放入精度為毫秒的類型中。
如果實際日期/時間值為 2020/01/11 17:15:38.685900,則必須將其四舍五入到 .686。 如果實際值為.685400,則將向下舍入為.685
如果您將數據類型更改為 datetime2(3) - 它將以毫秒的精度存儲在 SQL 服務器中,並且您不會對值進行任何舍入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.