2011-06-23 46 views
2

我在我的数据库中的几个表中有一些列都在本地化服务器的DateTime值中。我想将这些全部转换为UTC日期时间值(不需要是DateTime2,因为它将假定新值将以UTC表示)。Sql Server 2008-将本地化的DateTime列转换为UTC

我想在单个SQL语句中执行此操作。我不完全确定如何执行此操作,因为我不花费大量时间在数据库中。

假设可以做我的表名是TestTable和我的本地化的DateTime列被称为TestDateTime。

我想让脚本对表格进行更新以及转换。

任何方式可能做到这一点?

回答

4

您可以从getdate()。减去getutcdate()找到差异:

select DateAdd(s,DateDiff(s, getdate(),getutcdate()), LocalizedDateColumn) 

这里假设你是在同一个夏季/冬季状态,你想转换的时间。不理想,但我知道你可以在纯SQL中完成的最佳转换。

C#客户具有更强的转换:

yourDateTime.ToUniversalTime() 

不同于SQL版本,.NET版本在暑假期间将正确转换冬季日期。

+1

我不是超级关心DST的准确性,我知道我已经抵消了。我认为我可以做这样的事情:'选择DATEADD(小时,5,(从TestTable选择TestDateTime))' – Brandon

+0

@Brandon:是的,这会增加5个小时,就像你期望的那样:) – Andomar

+1

最后的SQL是这个:'更新TestTable设置TestDateTime = DATEADD(小时,5,TestDateTime)'。完美工作。 – Brandon