age*_*r85 3 sql-server datetime
我在用着
Microsoft SQL Server 2019 (RTM-CU22) (KB5027702) - 15.0.4322.2 (X64)
2023 年 7 月 27 日 18:11:00 版权所有 (C) 2019 Microsoft Corporation Express Edition(64 位),适用于 Windows 10 Pro 10.0(内部版本 19045: )
我有一张用它创建的表
CREATE TABLE yokogawaReading(
yokogawaReading INTEGER NOT NULL IDENTITY (1, 1),
readingDate SMALLDATETIME not null,
celsiusTemperature1 DECIMAL (4,2),
relativeHumidity1 DECIMAL (5,3),
celsiusTemperature2 DECIMAL (4,2),
relativeHumidity2 DECIMAL (5,3)
);
Run Code Online (Sandbox Code Playgroud)
每当我尝试插入字段值包含readingDate
非零秒值的记录时,例如,
EXEC sp_set_session_context @key = N'readingDateTime', @value = '2023/11/14 11:09:30';
EXEC sp_set_session_context @key = N't1', @value =20.027777777777777777777777778;
EXEC sp_set_session_context @key = N'rh1', @value =44.97;
EXEC sp_set_session_context @key = N't2', @value =18.916666666666666666666666667;
EXEC sp_set_session_context @key = N'rh2', @value =38.485;
"INSERT INTO yokogawaReading (readingDate, celsiusTemperature1, relativeHumidity1, celsiusTemperature2, relativeHumidity2) VALUES (CONVERT(datetime, SESSION_CONTEXT(N'readingDateTime'), 101), CONVERT(decimal(7, 2), SESSION_CONTEXT(N't1')), CONVERT(decimal(5, 2), SESSION_CONTEXT(N'rh1')), CONVERT(decimal(7, 2), SESSION_CONTEXT(N't2')), CONVERT(decimal(5,2), SESSION_CONTEXT(N'rh2')));"
Run Code Online (Sandbox Code Playgroud)
生成的记录以秒数为“00”的时间结束。我检查了SMALLDATETIME 上的文档,它肯定包括秒,但不是毫秒。为什么会发生这种情况?我该如何解决?
[附录]我想我可能已经在这个论坛问题上找到了为什么问题的答案。(参见TG于2011-10-26 : 17:37:20的回复。)TG说
Sql 服务器将smalldatetime 存储为一对2 字节的smallint。第一个smallint 是1900-01-01 的某种日偏移量。第二个smallint 是距0:00:00 的分钟偏移量。
如果这是准确的,那么它无法存储秒数,并且我上面提到的文档一定是不正确的。是吗?