【发布时间】:2016-04-11 00:15:42
【问题描述】:
我需要将数据库中的日期列转换为正好 5 小时。时间保持为 UTC,当他们查看它时,它会显示 EST 时区。该应用程序会自动转换时间。 UTC 比东部标准时间早 5 。下面的代码似乎修复了大多数时间戳的时间和日期,但是有没有办法设置和偏移?该报告回顾了一天,应该将转换后的 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
【问题讨论】:
-
什么样的报表使用这个查询?返回原始 UTC 时间(减去一天)然后在报告中执行时区转换可能会容易得多,类似于在您的应用中完成的方式。
-
嗨,Esoteric,您能否发布一个示例代码行,如果我想根据此列时间戳的前一天运行报告,我该如何编写?
标签: sql sql-server-2008 tsql datetime utc