毫秒不会从数据中删除

Posted

技术标签:

【中文标题】毫秒不会从数据中删除【英文标题】:Millisecond is not removed from data 【发布时间】:2021-08-26 01:21:58 【问题描述】:

我的表中有一个DateTime 列。我想存储没有毫秒标记的运行日期。 我尝试了下面的代码,但在表格中,毫秒为 0000000。

是否可以只存储“2021-06-09 08:58:03”格式的日期?

DateTime dt = Convert.ToDateTime(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

提前致谢。任何帮助将不胜感激。

【问题讨论】:

如果您不需要毫秒,请使用 smalldatetime 作为列数据类型 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 日期不以任何格式存储,只是内部二进制格式,它们存储为日期对象。 ONLY 格式会在您显示日期时发生。当您查询它时,您将看到默认格式,但这不是它的存储方式。请注意其推荐的最佳实践,不再使用smalldatetime,而是使用datetime2()。我建议存储为datetime2() 并格式化以在显示时删除 ms。 @Squirrel smalldatetime 数据类型我相信是分钟,而不是秒?此外,与其他时间不同,我相信它是“四舍五入到最接近的分钟”,而不是简单地截断。 @Gudwlk 不就是把它转成文字吗? 【参考方案1】:

前期

    决定是要存储 SQL datetime(或相关)类型还是仅存储日期和时间的格式化字符串表示形式。

    还要决定是否要使用本地时钟(客户端工作站甚至 Web 服务器的时钟,其时钟可能与数据库服务器处于不同的时区,或者与数据库服务器的时间不同步) .

因为

如果需要能够审计/报告/协调“事件顺序”,您应该选择适当的 SQL 类型,例如 datetime/datetime2/smalldatetime,而不是使用客户端代码查询客户端时钟,使用 SQL DATE 和 TIME 函数MS T-SQL date and time types and functions。如果您这样做,则以提供的任何精度记录值,并在检索值以进行显示时担心字符串格式。

只有当您希望在数据库中存储日期和时间的字符串表示时,您才应该关心插入时的格式。

最终答案

考虑一个浮点​​数值类型,如 C# 的 double。您可以声明double d1 = 1.23E+2;double d2 = 123d1d2 都包含相同的值(大约 123.00...0 大约有 13 个零,所有这些都是有意义的)。赋值时使用的格式不会影响值的未来使用或使用时的系统行为,无论是用于算术还是显示目的。这同样适用于日期和时间类型。

@mjwills 评论教会了我一些我不知道的事情:datetime2(0) 似乎提供了您想要的 - 日期和时间精度为整秒,但仍会记录几分之一秒(尝试将值CURRENT_TIMESTAMP 插入datetime2(0) 列),因此将精度参数视为存储分配提示,而不是对“记录的有效数字”的硬限制,您仍然需要担心在检索报告时格式化值/显示。

【讨论】:

温馨建议:为了减少混淆,您可能希望在解释中使用“日期/时间”而不是“时间戳”(名词)。 (动词有点难,例如“记录当前日期/时间”。)在 SQL Server 中,与 ISO 标准不同,timestamprowversion 的同义词:“timestamprowversion 数据的同义词type 并且受数据类型同义词的影响。在 DDL 语句中,尽可能使用rowversion 而不是timestamp。"

以上是关于毫秒不会从数据中删除的主要内容,如果未能解决你的问题,请参考以下文章

FreeMarker - 从毫秒中删除逗号

redis过期键删除策略以及大key删除方法

删除 DateTime 对象中的小时:秒:毫秒

从时间戳中丢弃毫秒部分

Python中的时间(以毫秒为单位)

删除小时:秒:DateTime对象中的毫秒数