2013-06-18 2 views
0

У нас есть таблица, содержащая столбец DateTime2 (7), и мы пытаемся взять значения из этого столбца и вставить их в другую таблицу, соответствующий тип данных столбца - DateTimeOffset. Даты источник выглядеть примерно так:Не уверен, как правильно преобразовать DateTimeOffset

2013-02-28 00:15:49.8270000 
2013-03-11 00:26:38.1270000 

Мы хотим, чтобы они конвертируются выглядеть следующим образом (предполагается, что Eastern Standard Time - Время движется вперед один час 10 марта)

2013-02-28 00:15:49.8270000 -05:00 
2013-03-11 00:26:38.1270000 -04:00 

Я не как сказать SQL Server взять исходную дату и, основываясь на этой дате и времени, преобразовать ее в соответствующий DateTimeOffset, влияющий на эту дату и время, используя часовой пояс EST.

Мне известно о функции ToDateTimeOffset, но, если я правильно понимаю, я должен предоставить этой функции значение смещения. Я хочу, чтобы SQL Server понял это на основе часового пояса (например, EST), который я предоставляю.

+0

Я не думаю, что есть что-то встроенное. Для этого вам, возможно, придется обратиться к SQLCLR. –

+0

@ RichardDeeming - Да, я боялся этого. –

ответ

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); 
     } 
    } 
} 
Смежные вопросы