我们在sql server数据库的表中有一列,其数据类型为datetime
。我们决定将此列的数据类型更改为datetimeoffset(7)
。
主要建议这样做的方式(可以看作here)是:
但还有另一个解决方案来完成这项工作,(可以看到here),我们这样调整:
// this is part of our migration file:
public override void Up()
{
AlterColumn("_TableName_", "_ColumnName_", c => c.DateTimeOffset(nullable: true, precision: 7));
Sql(@"
update Tralus.MelkRadar.Crawl
set _ColumnName_ = todatetimeoffset(_ColumnName_, '+04:30')
");
}
AlterColumn
更改数据库中的数据类型,保留数据并将offset
部分数据设置为00:00
Sql()
声明,纠正了偏移部分。采取第二种方法时,有什么重要的事情要照顾吗? 有没有理由为什么人们更喜欢第一种方法,尽管第二种方法更容易做到?是否有任何理由让您建议使用其中一种方法而不是另一种方法?
如果您需要处理历史日期时间值,可能是在本地夏令时期间,我会选择选项2.更改列类型,然后使用sql更新值;
... _ColumnName_ = cast(_ColumnName_ as datetime2(7)) AT TIME ZONE '<name of timezone>'