使用带有 Select 语句 SQL 的标量值函数将 UTC 时间更改为本地时间

Changing UTC Time to Local Time using scalar-valued function with Select statements SQL

两天来我一直在努力完成这项工作,但仍然卡住了。任何帮助或提示将不胜感激。

正在为日期转换创建一个函数:

    CREATE FUNCTION LocalDateFromUTCTime
(
    @UTCDateTime datetime
)
RETURNS datetime
BEGIN
    DECLARE @diff int;
    SET @diff = datediff(hh,GetUTCDate(), GetDate());
    RETURN DATEADD(day, DATEDIFF(day, 0, DATEADD(hh, @diff, @UTCDateTime)),0);
END

然后 select SQL 我试图与上面的函数一起使用的语句如下:

SELECT 
        o.Number AS 'Order#',
        o.[guid] as 'guid',
        dbo.LocalDateFromUTCTime(o.settlementdate) as 'closing date'

FROM pf.order o

这样做会显示没有时间戳的结算日期。

2015-07-15 00:00:00.000

我如何更改它以显示正确的当地时间?

谢谢

您的日期转换专门返回天数差异。 dateadd 将日期 0(实际上是 01-01-1900)和您的 UTC 日期之间的天数添加到不同的日期 0。这意味着小时和分钟被完全忽略。

如果您想包括小时和分钟,您只需删除 dateadd(...datediff( 部分:

RETURN DATEADD(hh, @diff, @UTCDateTime)