我有兩列DATETIME,我想將它們的差別顯示爲'yyyy-mm-dd hh:MM:ss'
。我的假設是間隔永遠不會變負。在MySQL中格式化時間間隔爲'yyyy-mm-dd hh:MM:ss'
我的搜索導致:
SELECT CONCAT(DATEDIFF(`to`, `from`), " ", TIMEDIFF(`to`, `from`))
但它給出了:
0 00:00:00
但我希望能得到:
0000-00-00 00:00:00
有沒有人有什麼建議?
我有兩列DATETIME,我想將它們的差別顯示爲'yyyy-mm-dd hh:MM:ss'
。我的假設是間隔永遠不會變負。在MySQL中格式化時間間隔爲'yyyy-mm-dd hh:MM:ss'
我的搜索導致:
SELECT CONCAT(DATEDIFF(`to`, `from`), " ", TIMEDIFF(`to`, `from`))
但它給出了:
0 00:00:00
但我希望能得到:
0000-00-00 00:00:00
有沒有人有什麼建議?
可以與TIMESTAMPDIFF重複調用和TIMESTAMPADD計算間隔:
實施例:
SET @to = CAST('2014-10-03 12:00:00' AS DATETIME);
SET @from = CAST('2011-05-12 13:12:44' AS DATETIME);
-- get the full years
SELECT TIMESTAMPDIFF(YEAR, @from, @to); -- 3
-- get the months, without full years in between
SELECT TIMESTAMPDIFF(MONTH, TIMESTAMPADD(YEAR, TIMESTAMPDIFF(YEAR, @from, @to), @from), @to); -- 4
-- get the days, without all months in between
SELECT TIMESTAMPDIFF(DAY, TIMESTAMPADD(MONTH, TIMESTAMPDIFF(MONTH, @from, @to), @from), @to); -- 20
-- get the hours, without all days in between
SELECT TIMESTAMPDIFF(HOUR, TIMESTAMPADD(DAY, TIMESTAMPDIFF(DAY, @from, @to), @from), @to); -- 22
-- get the minutes, ...
SELECT TIMESTAMPDIFF(MINUTE, TIMESTAMPADD(HOUR, TIMESTAMPDIFF(HOUR, @from, @to), @from), @to); -- 22
-- and the same for the seconds
SELECT TIMESTAMPDIFF(SECOND, TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, @from, @to), @from), @to); -- 16
看到它在this fiddle
級聯由這些值的結果是直接的:
SELECT CONCAT(
LPAD(TIMESTAMPDIFF(YEAR, @from, @to), 4, '0'),
'-',
LPAD(TIMESTAMPDIFF(
MONTH,
TIMESTAMPADD(YEAR, TIMESTAMPDIFF(YEAR, @from, @to),
@from), @to), 2, 0),
'-',
LPAD(TIMESTAMPDIFF(
DAY,
TIMESTAMPADD(MONTH, TIMESTAMPDIFF(MONTH, @from, @to),
@from), @to), 2, 0),
' ',
LPAD(TIMESTAMPDIFF(
HOUR,
TIMESTAMPADD(DAY, TIMESTAMPDIFF(DAY, @from, @to),
@from), @to), 2, 0),
':',
LPAD(TIMESTAMPDIFF(
MINUTE,
TIMESTAMPADD(HOUR, TIMESTAMPDIFF(HOUR, @from, @to),
@from), @to), 2, 0),
':',
LPAD(TIMESTAMPDIFF(
SECOND,
TIMESTAMPADD(MINUTE, TIMESTAMPDIFF(MINUTE, @from, @to),
@from), @to), 2, 0)
);
-- result: 0003-04-20 22:47:16
看它工作在this fiddle。 請認爲結果可能很容易就像0001-02-30 01:12:14
...
鑑於DATEDIFF返回一個整數,沒有辦法可以轉換爲年/月/日 - 它將取決於開始日期(30天可能是1個月,或者它可能不是......)您是否必須在SQL中執行此操作?如果你可以做到客戶端,它會更簡單。 –
不幸的是我正在尋找一個只有SQL的解決方案。否則它會很容易。我正在編寫一個SQL文件並將其提供給'mysql <./ format.sql'控制檯應用程序,並且它應該按照要求顯示它。 – Mehran
@Mehran檢查我更新的答案 – Sadikhasan