【问题标题】:SQL Server 2008 UTC Conversion to ESTSQL Server 2008 UTC 转换为 EST
【发布时间】: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

【问题讨论】:

标签: sql sql-server-2008 tsql datetime utc


【解决方案1】:

实现此目的的一种简单方法是创建一个计算列,然后让报告引用这个新列。这样您就可以保留原始数据并仍然通过数据库处理转换。

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

【讨论】:

  • 如果我想根据 Converted 字段的前一天运行报告 - 1 怎么办?
  • 我会在支持报告的存储过程的 where 子句中处理这个问题。类似于 Where SomeDate = DateAdd(dd,-1,MyDate)
猜你喜欢
  • 2018-02-14
  • 2021-11-04
  • 1970-01-01
  • 2011-09-21
  • 2012-06-06
  • 1970-01-01
  • 2021-12-13
  • 2010-11-15
  • 1970-01-01
相关资源
最近更新 更多