我正在执行一些SQL select查询,并希望将UTC datetime列转换为本地时间,以便在查询结果中显示为本地时间.请注意,我不希望通过代码进行这种转换,而是在对数据库执行手动和随机SQL查询时进行转换.
我正在执行一些SQL select查询,并希望将UTC datetime列转换为本地时间,以便在查询结果中显示为本地时间.请注意,我不希望通过代码进行这种转换,而是在对数据库执行手动和随机SQL查询时进行转换.
在SQL Server 2008或更高版本上,可以按以下方式执行此操作:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
你也可以做一些不那么冗长的事情:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
无论你做什么,do not都会使用-
来减go 日期,因为这个操作不是原子的,而且由于系统日期时间和本地日期时间在不同时间(即非原子)被判断的竞争条件,有时会得到不确定的结果.
请注意,这个答案没有考虑DST.如果您想包括DST调整,请参见以下问题:
How to create Daylight Savings time Start and End function in SQL Server