我有一個MySQL表的兩列兩個日期之間的區別:如何計算個月在MySQL
- DateOfService(日期時間)
- 出生日期(日期)
我想運行一個MySQL查詢將在幾個月內提供這兩個字段之間的日期差異。
我該如何在MySQL select查詢中做到這一點?
謝謝。
我有一個MySQL表的兩列兩個日期之間的區別:如何計算個月在MySQL
我想運行一個MySQL查詢將在幾個月內提供這兩個字段之間的日期差異。
我該如何在MySQL select查詢中做到這一點?
謝謝。
試試這個:
SELECT DATEDIFF(DateOfService, BirthDate)/30 as months FROM ...
看一看在MySQL中TIMESTAMPDIFF()功能。
這是什麼讓你做的是兩個TIMESTAMP
或DATETIME
值(甚至DATE
作爲MySQL將自動轉換)通以及您要立足於你的時間差的單位。
您可以在第一個參數指定MONTH
爲單位:
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
-- 0
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
-- 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
-- 1
SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
-- 7
它基本上得到的數從參數列表中的第一個日期起已經過去了幾個月。該解決方案解釋了每個月(28,30,31)以及閏年不同的天數。
如果你想在過去的月數小數精度,這是一個有點複雜,但這裏是你如何能做到這一點:
SELECT
TIMESTAMPDIFF(MONTH, startdate, enddate) +
DATEDIFF(
enddate,
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate)
MONTH
)/
DATEDIFF(
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
MONTH,
startdate + INTERVAL
TIMESTAMPDIFF(MONTH, startdate, enddate)
MONTH
)
凡startdate
和enddate
是你的日期參數,無論是從一個表中或作爲輸入參數的兩個日期欄從腳本:
實例:
With startdate = '2012-05-05' AND enddate = '2012-05-27':
-- Outputs: 0.7097
With startdate = '2012-05-05' AND enddate = '2012-06-13':
-- Outputs: 1.2667
With startdate = '2012-02-27' AND enddate = '2012-06-02':
-- Outputs: 3.1935
嘿,我能夠實現上述結果,但我的條件是,我需要0.5年,1年,1.5年,2年,2.5年等..我怎麼能這樣做! – Dipen 2015-03-03 07:44:28
TRY與
PERIOD_DIFF(P1,P2)
返回週期P1和P2之間的月數。 P1和P2的格式應爲YYMM
或YYYYMM
。請注意,週期參數P1和P2不是日期值。
mysql> SELECT PERIOD_DIFF(200802,200703); - > 11
這不回答這個問題的任擇議定書,因爲它不接受時間日期格式,甚至日期格式。也許如果這個問題被編輯顯示這個,那麼我可能會收回我的-1。 – amaster 2013-08-07 15:40:53
TIMESTAMPDIFF(MONTH, Start_date, End_date)
例子:
SELECT TIMESTAMPDIFF(MONTH, BirthDate, DateOfService) AS Months FROM Table
基於所有答案的總結和谷歌搜索,我認爲有四個幾乎相同的方式來寫它:
1)
TIMESTAMPDIFF(MONTH, Start_date, End_date) AS Period
例如
TIMESTAMPDIFF(MONTH, MIN(r.rental_date), MAX(r.rental_date)) AS Period
2)
PERIOD_DIFF(date_format(now(), '%Y%m'), date_format(time, '%Y%m')) as months
或者
PERIOD_DIFF(date_format(End_date(), '%Y%m'), date_format(Start_date, '%Y%m')) as months
例如
PERIOD_DIFF(date_format(MAX(r.rental_date), '%Y%m'), date_format(MIN(r.rental_date), '%Y%m')) as months
3)
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM NOW()), EXTRACT(YEAR_MONTH FROM time)) AS months
OR
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM End_date()), EXTRACT(YEAR_MONTH FROM Start_date)) AS months
例如
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM MAX(r.rental_date)), EXTRACT(YEAR_MONTH FROM MIN(r.rental_date))) as Months
4)
PERIOD_DIFF(concat(year(d1),if(month(d1)<10,'0',''),month(d1)), concat(year(d2),if(month(d2)<10,'0',''),month(d2))) as Months**
例如
PERIOD_DIFF(
concat(year(MAX(r.rental_date)),if(month(MAX(r.rental_date))<10,'0',''),month(MAX(r.rental_date))),
concat(year(MIN(r.rental_date)),if(month(MIN(r.rental_date))<10,'0',''),month(MIN(r.rental_date)))
) as Months
「正確的」答案取決於您所需要的。我喜歡輪最接近的整數。
考慮這些例子: 月1日1至1月> 31:這是全0個月,近1個月之久。 1月1日 - > 2月1日?整整一個月,整整一個月。
要得到整個個月數量,用途:
SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-01-31'); => 0
SELECT TIMESTAMPDIFF(MONTH, '2018-01-01', '2018-02-01'); => 1
要獲得個月圓潤時間,你可以使用:
SELECT ROUND(TIMESTAMPDIFF(DAY, '2018-01-01', '2018-01-31')*12/365.24); => 1
SELECT ROUND(TIMESTAMPDIFF(DAY, '2018-01-01', '2018-01-31')*12/365.24); => 1
這是精確到+/- 5天,範圍超過1000年。 Zane的回答顯然更準確,但對我的喜好來說太冗長了。
您能否給您所期望的輸出的例子嗎?例如:今天是4月12日,我的生日是4月14日或5月12日或5月15日。您希望從查詢中獲得什麼值? – Teetrinker 2011-04-12 10:35:24
重複:http://stackoverflow.com/questions/288984/the-difference-in-months-between-dates-in-mysql – manji 2011-04-12 10:37:37
DateOfService列日期總是會大於出生日期欄。所以我需要從DateOfService中減去BirthDate並計算幾個月內的差異。 – Awan 2011-04-12 10:38:02