sql-server - SQL datetime2 不能保存日期时间
问题描述
在某些情况下,似乎 adatetime2
不能保存值的datetime
值。这是预期的吗?
注意最后 2 列。还是转换损坏了数据?
SELECT
DATETIMEFROMPARTS (2021, 2, 28, 10, 11, 12, 267),
CONVERT(datetime, DATETIMEFROMPARTS (2021, 2, 28, 10, 11, 12, 267)),
CONVERT(datetime2, DATETIMEFROMPARTS (2021, 2, 28, 10, 11, 12, 267)),
CAST(DATETIMEFROMPARTS (2021, 2, 28, 10, 11, 12, 267) AS datetime2)
我真的不需要这些转换,但是我遇到了实体框架的问题,即生成 SQL 转换 my datetime
to datetime2
,导致在将其加载到 C# 时存在细微差异DateTime
解决方案
你的误解是你认为adatetime
精确到1/1000秒;它不是。.267
不在.267000
a 中datetime
,它是.266666~
,因为datetime
精确到 1/300 秒。
因此,当您以 4 或更高的精度将 a 转换datetime
为 adatetime2
时,将正确表示 1/300 秒。因此267
对于 a datetime
= .2666667
in a datetime2(7)
。
如果您愿意,请267
使用 a datetime2(3)
not a datetime2(7)
。
注意 2014(及更早版本)SQL Server 用于错误地转换.267
为267000
较新的日期和类型数据类型。这在 SQL Server 2016 中已更改。请参阅SQL Server 2016 (13.x)中的重大更改。
推荐阅读
- python - 处理大型 xml 文件。只有根树子属性是相关的
- ruby-on-rails - 在 Atom 中注释 erb 文件效果不佳
- c - 如果我链接了静态库,我应该在“BIG”包含文件中包含哪些文件?
- vue.js - 如何在输入 vue-treeselect 时获取不存在的 value/v-model
- linux - 如何在 Linux 中获取 read() 的调用堆栈?
- c# - ASP.NET MVC HTML.Beginform 没有调用正确的操作
- azure-devops - 使用 yaml Azure DevOps Pipeline 构建错误
- java - 手柄方向已更改
- php - Doctrine ORM - 按关系的关系字段排序
- terminal - VSCode 有没有办法保存终端设置?