毫秒不会从数据中删除
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 = 123
。 d1
和 d2
都包含相同的值(大约 123.00...0 大约有 13 个零,所有这些都是有意义的)。赋值时使用的格式不会影响值的未来使用或使用时的系统行为,无论是用于算术还是显示目的。这同样适用于日期和时间类型。
@mjwills 评论教会了我一些我不知道的事情:datetime2(0) 似乎提供了您想要的 - 日期和时间精度为整秒,但仍会记录几分之一秒(尝试将值CURRENT_TIMESTAMP
插入datetime2(0)
列),因此将精度参数视为存储分配提示,而不是对“记录的有效数字”的硬限制,您仍然需要担心在检索报告时格式化值/显示。
【讨论】:
温馨建议:为了减少混淆,您可能希望在解释中使用“日期/时间”而不是“时间戳”(名词)。 (动词有点难,例如“记录当前日期/时间”。)在 SQL Server 中,与 ISO 标准不同,timestamp
是 rowversion
的同义词:“timestamp
是 rowversion
数据的同义词type 并且受数据类型同义词的影响。在 DDL 语句中,尽可能使用rowversion
而不是timestamp
。"以上是关于毫秒不会从数据中删除的主要内容,如果未能解决你的问题,请参考以下文章