将表格列从datetime2转换为datetime

5

我被分配了一个奇怪的任务,需要将40个表格列从datetime2转换为datetime。

这是我在数据库中拥有的datetime格式。2007-11-12 00:00:00

它包含超过90,000个记录。

请协助处理。


2
格式无关紧要。日期是数字,而不是字符串。 - Dan Bracuk
2个回答

9
  • 您需要检查是否存在小于1753年1月1日的值(因为它们与datetime不兼容)。例如:

SELECT * FROM MyTable WHERE MyColumn < '1753-01-01'

  • 您需要决定如何处理这些值,例如(在此我将所有小于1753-01-01的值更改为1753-01-01):

UPDATE MyTable SET MyColumn = '1753-01-01' WHERE MyColumn < '1753-01-01'

  • 修改列类型:

ALTER TABLE MyTable ALTER COLUMN MyColumn DATETIME


3

这太荒谬了,datetime2更加精确,它有更大的日期范围并且占用相同数量的字节(8)。

以下是MSSQL的代码:

alter table tablename alter column colname datetime

如果这种方法由于某些原因不起作用,您总是可以添加一列,从旧列更新,删除旧列并重命名新列。 - Dan Bracuk
@DanBracuk的旧列是datetime2,这将可以工作,尽管可能会失去一些精度。 - t-clausen.dk
可能存在不可能的日期:小于1753年1月1日(datetime的最小日期)的值。 - xanatos
@xanatos 很敏锐,那会导致超出范围错误并失败。 - t-clausen.dk
它将适用于那些允许您直接更改数据类型的数据库引擎。我使用的一个叫做redbrick的数据库引擎不支持直接更改数据类型。 - Dan Bracuk
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接