我们有一个包含DateTime2(7)列的表,我们正在尝试从该列中获取值并将它们插入到另一个表中,该表的相应列数据类型为DateTimeOffset。源日期看起来像这样:
2013-02-28 00:15:49.8270000
2013-03-11 00:26:38.1270000
我们希望他们转换成这样(假设东部标准时间 - 时间在3月10日前进一小时。)
2013-02-28 00:15:49.8270000 -05:00
2013-03-11 00:26:38.1270000 -04:00
我不确定如何告诉SQL Server获取源日期,并根据该日期和时间,使用EST时区将其转换为在该日期和时间生效的正确DateTimeOffset。 / p>
我知道ToDateTimeOffset函数,但是,如果我理解正确,我必须为该函数提供偏移值。我希望SQL Server根据我提供的时区(例如,EST)来解决这个问题。
答案 0 :(得分:1)
这应该与SQLCLR相当简单。假设时区总是EST,那么这样的事情应该有效:
using System;
using Microsoft.SqlServer.Server;
namespace SqlUtilities
{
public static class Dates
{
private static readonly TimeZoneInfo EST = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
[SqlFunction(
Name = "ToDateTimeOffset",
DataAccess = DataAccessKind.None,
IsDeterministic = true,
IsPrecise = true
)]
public static DateTimeOffset? ToDateTimeOffset(DateTime? value)
{
if (value == null) return null;
var source = value.Value;
var offset = EST.GetUtcOffset(source);
return new DateTimeOffset(source, offset);
}
}
}