我wan't到我的記錄條目從dateTtime轉換+偏移dateTtimeZ直接SQL轉換爲GMT日期時間
(2008-05-11T15:30:00 + 2 ---> 2008-05-11T13: 30:00Z)
帶有sql函數。
不知道如何做到這一點:-(
我需要實現這個使用MySQL不使用存儲的特效
THX
我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