使用带有 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)
两天来我一直在努力完成这项工作,但仍然卡住了。任何帮助或提示将不胜感激。
正在为日期转换创建一个函数:
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)