SQL转换为GMT日期时间

SQL转换为GMT日期时间,sql,time,Sql,Time,我不想直接将我的记录条目从dateTtime+OFFSET转换为dateTtimeZ (2008-05-11T15:30:00+2--->2008-05-11T13:30:00Z) 使用sql函数 不知道怎么做:-( 我需要使用MySql实现这一点,而不是使用存储过程 Thx如果我正确理解了您的问题,则无法从time+offset中找出时区,因为映射不是唯一的。多个时区可能具有相同的偏移 (GMT-06:00) Saskatchewan (GMT-06:00) Guadalajara, Mexi

我不想直接将我的记录条目从dateTtime+OFFSET转换为dateTtimeZ

(2008-05-11T15:30:00+2--->2008-05-11T13:30:00Z)

使用sql函数

不知道怎么做:-(

我需要使用MySql实现这一点,而不是使用存储过程


Thx

如果我正确理解了您的问题,则无法从time+offset中找出时区,因为映射不是唯一的。多个时区可能具有相同的偏移

(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
请看这个示例,其中多个时区具有相同的偏移量

(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
补充:现在我看到你要求别的东西了

好的,如果datetimes中的偏移量始终相同,您可以尝试此转换

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

您的问题不清楚,但我假设您将值作为字符串。如果是这样,则将除偏移量以外的所有内容提取为
datetime
,也将偏移量提取为
datetime
,然后使用符号计算最终结果(T-SQL,2005):


解决方案可能取决于您的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
试试这个

要将GMT转换为本地时间,请执行以下操作:

select DATEADD(hour,DATEDIFF (hour, GETUTCDATE(), GETDATE()),MyGmtDateTime) as LocalDateTime
要将本地时间转换为GMT,请执行以下操作:

select DATEADD(hour,DATEDIFF (hour, GETDATE(), GETUTCDATE()),MyLocalDateTime) as GmtDateTime

使用SQL函数
CONVERT_TZ(dt,from_TZ,to_TZ)

CONVERT_TZ()从给定的时区转换日期时间值dt from_tz到to_tz给定的时区,并返回结果 价值观

例如:

UPDATE this_table
SET this_table_date_gmt = (
    SELECT CONVERT_TZ(this_date, '+00:00', '-02:00')
)

参考资料:

我认为OP的意思是“TZ”表示GMT-请注意文章标题。我在上面添加了一个转换示例。请注意,
SWITCHOFFSET
对于SQL Server 2008来说是一个新的功能。可能最好构建一个标量函数,它可以是一个提供的函数,并且可以更有效地对结果集进行操作。特别是当需要在查询中更改日期时。最好将
hour
更改为
minute
支持带有非完美小时偏移量的时区,例如+03:30