SQL转换为GMT日期时间
我wan't到我的记录条目从dateTtime转换+偏移dateTtimeZ直接SQL转换为GMT日期时间
(2008-05-11T15:30:00 + 2 ---> 2008-05-11T13: 30:00Z)
带有sql函数。
不知道如何做到这一点:-(
我需要实现这个使用MySQL不使用存储的特效
THX
如果我理解正确你的问题prefering,没有从时间+偏移量中找出时区,因为映射不是唯一的,几个时区可能具有相同的偏移量
看看这个例子,其中多个时区具有相同的偏移量
(GMT-06:00) Saskatchewan
(GMT-06:00) Guadalajara, Mexico City, Monterrey - Old
(GMT-06:00) Guadalajara, Mexico City, Monterrey - New
(GMT-06:00) Central Time (US & Canada)
(GMT-06:00) Central America
增加:现在我看到你问别的东西。
好的,如果日期时间中的偏移量始终相同,则可以尝试此转换。
DECLARE @DateTimeWithOffset datetimeoffset
DECLARE @JustDateTime datetime
SET @DateTimeWithOffset = '2008-05-11 15:30:00 + 02:00'
SELECT @DateTimeWithOffset = SWITCHOFFSET (@DateTimeWithOffset, '00:00')
SELECT @JustDateTime = CAST (@DateTimeWithOffset AS datetime)
这是给你的想法。我手边没有SQL 2008权限,所以我没有测试过。可能不起作用。
我用我的SQL内置函数很生疏,但是在没有任何标准函数的情况下,可以编写一个存储过程来完成这项工作。然后,你可以调用它作为你的SELECT语句的一部分:
SELECT to_GMT(invoice_date) from INVOICES
的新增功能,可能更适合构建标量函数,它可以是一次性的,并且可以更有效地对结果集进行操作。特别是如果需要在查询中更改日期。 – GoldBishop 2017-11-08 16:42:45
它不是从你的问题不清楚,但我相信你有值的字符串。如果是这样,然后提取之外的所有偏移为datetime
,也得到了偏移为datetime
,然后用符号来计算最终结果(T-SQL,2005年):
DECLARE @withOffset varchar(30);
SET @withOffset = '2008-05-11T15:30:00+2:00';
PRINT N'Original: ' + CAST(@withOffset AS nvarchar);
DECLARE @dt datetime;
SET @dt = CONVERT(datetime, LEFT(@withOffset, 19), 126);
PRINT N'dt=' + CONVERT(nvarchar, @dt, 127);
DECLARE @ofs datetime;
SET @ofs = CONVERT(datetime, SUBSTRING(@withOffset, 21, LEN(@withOffset) - 21), 108);
PRINT N'ofs=' + CAST(@ofs AS nvarchar);
IF (SUBSTRING(@withOffset, 19, 1) = '+')
BEGIN
SET @dt = DATEADD(hour, DATEPART(hour, @ofs), @dt);
SET @dt = DATEADD(minute, DATEPART(minute, @ofs), @dt);
END
ELSE
BEGIN
SET @dt = DATEADD(hour, -DATEPART(hour, @ofs), @dt);
SET @dt = DATEADD(minute, -DATEPART(minute, @ofs), @dt);
END;
PRINT N'dt=' + CONVERT(nvarchar, @dt, 127);
该解决方案将可能取决于你的RDBMS。在Oracle这样的工作:
SQL> SELECT to_timestamp_tz('2008-05-11T15:30:00+2',
2 'yyyy-mm-dd"T"hh24:mi:ssTZH')
3 AT TIME ZONE 'GMT' gmt_time
4 FROM dual;
GMT_TIME
----------------------------------
11/05/08 13:30:00,000000000 GMT
试试这个
从格林尼治标准时间转换为本地时间:
select DATEADD(hour,DATEDIFF (hour, GETUTCDATE(), GETDATE()),MyGmtDateTime) as LocalDateTime
从本地时间转换为GMT:
select DATEADD(hour,DATEDIFF (hour, GETDATE(), GETUTCDATE()),MyLocalDateTime) as GmtDateTime
我想OP表示格林尼治标准时间的“TZ” - 标题的文章。 – PaulMcG 2009-09-10 09:11:25
我已经在 – Lici 2009-09-10 09:29:34
以上添加了一个转换示例请注意,'SWITCHOFFSET'是SQL Server 2008 – devstuff 2009-09-10 10:26:34