【问题标题】:Set datetime with random trailing nanoseconds to zero's [duplicate]将带有随机尾随纳秒的日期时间设置为零[重复]
【发布时间】:2017-04-21 21:47:56
【问题描述】:

我在一个表格中有多个日期,日期格式如下,例如:

2016-01-03 12:04:00.0123123

我需要更新整个表以将所有尾随毫秒和纳秒更新为零

所以上面的日期应该变成:

2016-01-03 12:04:00.0000000

有没有人可以帮助我完成这个更新脚本?

提前谢谢

【问题讨论】:

  • datetime/datetime2 列是什么数据类型?
  • 为什么首先需要将它们全部设置为 0?这似乎会适得其反,因为您正在从数据库中删除可能有价值的信息。也许您真正想要的是在检索数据时执行此操作(即属于前端的格式)
  • 它的日期时间2。它确实需要更改,因为当毫秒/纳秒为 0 并崩溃时,我们正在使用的某些应用程序无法处理。当它们全部变为零时,它对我们的价值并没有降低。
  • @TheGameiswar 它不是重复的,毫/纳秒不需要被截断,只需更新为零
  • 是什么让您认为截断与归零不同?毕竟11.0000000000000000000000的值是一样的

标签: sql sql-server stored-procedures


【解决方案1】:

我认为在省略毫秒的同时对值进行解码和编码应该可以解决问题:

UPDATE table
  SET field = DATETIMEFROMPARTS(
    DATEPART(year, field),
    DATEPART(month, field),
    DATEPART(day, field),
    DATEPART(hour, field),
    DATEPART(minute, field),
    DATEPART(second, field),
    0);

解码是使用DATEPART() 完成的。对于编码使用DATETIMEFROMPARTS()
如果您的字段类型为DATETIME2,您将使用DATETIME2FROMPARTS()

【讨论】:

  • 太棒了!非常感谢,效果很好
  • @ImperialBert 似乎还有很长的路要走,一个表达式就足够了 Update table Set field = format(field ,'yyyy-MM-dd HH:mm:ss')
猜你喜欢
  • 2018-08-23
  • 2019-06-27
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-15
  • 2021-07-30
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多