【问题标题】:Milliseconds from GETUTCDATE not stored in datetime fieldGETUTCDATE 的毫秒数未存储在日期时间字段中
【发布时间】:2013-10-17 13:12:20
【问题描述】:

我有将数据插入表的存储过程。表中的一列是日期时间,用于存储行插入的时间戳:

INSERT INTO myTable (Field1, Field2, Field3) VALUES (1, 2, GETUTCDATE());

Field3 是日期时间列。当我使用简单的SELECT * FROM myTable 查询从该表中选择数据时,所有日期时间值都以.000 毫秒值显示。

如果我执行SELECT GETUTCDATE(),则会显示毫秒:2013-10-16 18:02:55.793

为什么 SELECT 的日期时间列中没有存储/显示毫秒?

【问题讨论】:

  • 您是否通过应用程序检索此列?
  • 不,所有查询都在 SSMS 中执行。
  • 存储这些值的列的数据类型是什么???无论如何它是小日期时间???
  • 列是日期时间,这是肯定的。
  • SELECT CONVERT(VARCHAR(23), DatetimeColumn, 126) FROM table; 显示什么?

标签: sql sql-server datetime


【解决方案1】:

您必须在某处做某事才能将其更改为 smalldatetime 或其他东西,因为它可以正常工作。我刚刚创建了一个新表,像您显示的那样插入了数据,查询了该表并且我有毫秒数。

我找不到任何可以在服务器级别设置精度的地方,所以它必须在你的代码中。

【讨论】:

  • 我理解你的意思,但由于某种原因,这在我的服务器上不起作用。值直接从 GETUTCTIME() 传递到表,因此没有空间将类型更改为 smalldatetime。
  • 所以你确实得到了秒数,但没有得到毫秒数?
  • 是的,秒数没问题,但每条记录的毫秒数是 0.000
  • 所以运行这个并发布结果:创建表 TestTime (Test datetime) GO insert into TestTime (Test) values (getutcdate()) GO SELECT Test from TestTime GO Drop table TestTime GO
  • 运气好吗?结果如何?
【解决方案2】:

您使用的是哪种日期时间类型?要存储精确到毫秒的日期,如果您使用的是 SQL Server 2008 或更高版本,则需要使用 DATETIME2

'DATETIME' 的精度约为 1/300 秒。

“SMALLDATETIME”的精度为 1 分钟。

来源:http://msdn.microsoft.com/en-us/library/ff848733.aspx

【讨论】:

    【解决方案3】:

    正如Steve 建议的那样,问题与服务器无关。此表上有一个触发器,该触发器在插入时进行毫秒舍入。

    【讨论】:

      猜你喜欢
      • 2015-01-03
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 2021-05-25
      相关资源
      最近更新 更多