2016-01-06 8 views
0

Мне нужно преобразовать один столбец столбца даты, в датах базы данных отключены ровно 5 часов. Время хранится как UTC, и когда они видят его приложение, он отображает часовой пояс EST. Приложение автоматически преобразует время. UTC опережает Восточное стандартное время на 5. Следующий код, похоже, фиксирует время и день для большинства временных меток, есть ли способ установить и смещать? Отчет выглядит один день назад и должен возвращать конвертированный UTC в EST раз.SQL Server 2008 UTC Преобразование в EST

SELECT DISTINCT 
    Encounters.EncounterNo, MedicalRecords.MedRecNo as MRN, 
    DATEADD(DAY, -1, DATEADD(hh, DATEDIFF(hh, GETDATE(), GETUTCDATE()), Documents.CreateDateTime)) AS [Create Date], 
    SUBSTRING(Enrollees.EnrolleeName, 1, CHARINDEX(',', Enrollees.EnrolleeName) - 1) as [Last Name], 
    SUBSTRING(Enrollees.EnrolleeName, CHARINDEX(',', Enrollees.EnrolleeName) + 1, len(Enrollees.EnrolleeName)) as [First Name], 
    DocTypes.DocTypeName, 
    CAST(Enrollees.BirthDate AS Date) AS [BIRTH DATE], 
    Enrollees.Gender, Enrollees.SocSecNo, Enrollees.Address, 
    CAST(Encounters.EncntrStartDate AS Date) AS [ADMIT DATE] 
FROM    
    Enrollees 
INNER JOIN 
    MedicalRecords ON Enrollees.EnrolleeOwnerId = MedicalRecords.EnrolleeOwnerId 
INNER JOIN 
    Documents 
INNER JOIN 
    DocTypes ON Documents.DocType = DocTypes.DocType 
INNER JOIN 
    DocsOwners ON Documents.DocId = DocsOwners.DocId 
INNER JOIN 
    Encounters ON DocsOwners.OwnerId = Encounters.EncntrOwnerId 
    ON MedicalRecords.MedRecOwnerId = Encounters.MedRecOwnerId 
WHERE 
    Documents.DocType = '65' 
    AND (DATEDIFF(DD, GETUTCDATE(), Documents.CreateDateTime) = - 1) 
ORDER BY 
    DocTypes.DocTypeName 
+0

http://www.sqlservercentral.com/Forums/Topic643108-8-1.aspx Вы, возможно, придется принимать во внимание день экономии света время тоже. https://social.msdn.microsoft.com/forums/sqlserver/en-US/5435096c-7b7a-4d8a-8933-ab3b987f2b21/date-conversion-utc-to-est-with-day-light-saving –

+0

Какой отчет использует этот запрос? Может быть намного проще вернуть необработанные UTC (минус один день), а затем выполнить преобразование часового пояса в отчете, как это делается в вашем приложении. –

+0

Hi Esoteric вы можете отправить образец строки кода, также если я хочу запустить отчет на основе дня назад этой отметки времени столбца, как я могу это написать? – Tony77

ответ

0

Простым способом достижения этого является создание калорированного столбца, а затем получение отчета для ссылки на этот новый столбец. Таким образом, вы можете сохранить исходные данные и по-прежнему обрабатывать преобразование через базу данных.

ALTER TABLE [Your Table Name] ADD 
UTC2EST AS dateadd(hh,-5,[Your current UTC datetime column]) 
+0

Что делать, если я хочу запустить отчет в соответствии с предыдущим днем ​​поля Converted - 1? – Tony77

+0

Я бы обработал это в условии where, где хранится процедура, поддерживающая отчет. Что-то вроде Where SomeDate = DateAdd (dd, -1, MyDate) – bsivel

Смежные вопросы