簡體   English   中英

如何在 ODBC 本機客戶端中獲取 SQL Server DateTime2 字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM