2012-12-18 70 views
3

我有下面的表:轉換日期爲UTC時間戳在MySQL

|start_date |TZ  | 
|Dec 2, 2012 |Eastern | 
|Dec 2, 2012 |GMT  | 

注1:我們的服務器是在UTC時間。

注2:列start_date是日期字段,而不是時間戳字段。 2012年12月2日意味着「2012-12-02 00:00:00」

注3:上表實際上是多個標準化表,但爲簡單起見,我對其進行了標準化。

注意4:我可以把任何東西放到TZ表中,以使這種簡單。

我想select from my_table where start_date <= now()

然而,這並不因爲時區的工作。如果當前日期/時間爲012年12月1日東部時間晚上9點(即12月2日凌晨1點UTC),則上述查詢將返回兩個結果 ,但我真的只想要第二個。夏令時使這變得更加複雜。

理想情況下,我想一個查詢,執行以下操作:

select * from my_table where convert_to_utc_timestamp(start_date,tz) <= now() 

上述方法將起始日期轉換爲時間戳,然後將其轉換爲正確的時區。

我該如何在SQL中執行此操作?

回答

3

有兩個函數可能會發現有用。

第一個是:

STR_TO_DATE(start_date,'%M %d,%Y') 

這將讓您的字符串,以指定格式,轉換到MySQL DATE數據類型。 如果您有mysql.time_zone_name et al。表格填寫,您可以使用函數:

CONVERT_TZ() 

(需要檢查CONVERT_TZ需要一個日期,並將返回一個DATETIME或TIMESTAMP,或在字符串中包含的時間成分被轉化爲得到一個DATETIME,如

STR_TO_DATE(CONCAT(start_date,' 00:00:00'),'%M %d,%Y %T') 

換行表達在CONVERT_TZ()函數,如

CONVERT_TZ( datetime_expr ,'US/Eastern','GMT') 

要使用存儲在您值的10列,這些將需要匹配,或者您需要提出一種方法來匹配存儲在mysql.time_zone_name表中的值。

+2

@Tihom:有時候,制定需要問的問題是我最需要的答案。 – spencer7593

相關問題