2017-09-27 55 views
0

我得到了一個非常簡單的需求: 將一些毫秒值轉換爲「##:##:##」(小時/分鐘/秒)格式。FROM_UNIXTIME返回一小時

看來FROM_UNIXTIME可以做的工作,所以我用它,但是......

SELECT 
    FROM_UNIXTIME(42, "%H:%i:%s") AS pony 
    ,FROM_UNIXTIME(3702, "%H:%i:%s") AS unicorn 

回報

pony  unicorn 
01:00:42 02:01:42 

有了這個功能沒有時區設置,我不知道如何去除這個額外的(跆拳道)小時。
去除3600秒產生負價值,它輸出NULL

我想我應該用另一種方式,但如果我必須使用半打轉換,我可能也做手工......是有沒有什麼簡單高效


我沒有一個確切的MySQL版本,但我至少需要便攜的反正。有些東西可以工作,比如MySQL 5.x 我需要手動進行計算嗎?


編輯: 選擇了難看的,但工作 「溶液」:

CONCAT(
    LPAD(FLOOR((my_column/1000)/3600), 2, '0'), ':', 
    LPAD(FLOOR(((my_column/1000) % 3600)/60), 2, '0'), ':', 
    LPAD(FLOOR((my_column/1000) % 60), 2, '0')) AS time 

輸出與所需的格式。 實例 「3點12分04秒」 或 「123:00:44」

+0

我的猜測是那是你當地的時區。也許使用'SET time_zone ='UTC';'幫助,請參閱https://stackoverflow.com/q/18276768/5520354 – C14L

+0

@ C14L是的,我相信這是因爲那些******* daylightssavings(Im FR),但現在只試圖設置時區...將所有結果都轉換爲** null **。另外,'UTC'似乎不是一個價值(產生了一個錯誤),必須使用'+00:00'。它是否可以解釋空值? – Balmipour

回答

0

我不得不選擇的難看,但工作 「溶液」:

CONCAT(
    LPAD(FLOOR((my_column/1000)/3600), 2, '0'), ':', 
    LPAD(FLOOR(((my_column/1000) % 3600)/60), 2, '0'), ':', 
    LPAD(FLOOR((my_column/1000) % 60), 2, '0')) AS time 

與期望的格式輸出。例子 「3時12分04秒」 或 「123:00:44

C14L的評論應該是一個更好的選擇,但它只是使事情更糟:/

請,如果後一個答案你有一些可靠和易於使用的東西。
不得不手動進行這種計算對我來說沒有意義。