我想計算兩個日期的月份差異,這將返回一個浮點值。SQL:按月計算
例如:
DATE1 = '4/23/2008' 的 DATE2 = '12/31/2008' 的
,這將是7.y個月。我想找到y值。有人可以給我的公式,使這個在SQL代碼? tnx ..
我想計算兩個日期的月份差異,這將返回一個浮點值。SQL:按月計算
例如:
DATE1 = '4/23/2008' 的 DATE2 = '12/31/2008' 的
,這將是7.y個月。我想找到y值。有人可以給我的公式,使這個在SQL代碼? tnx ..
有沒有標準的SQL來處理這個普遍。這取決於你正在使用的數據庫。基本上,您需要將兩個日期字符串轉換爲您的數據庫引擎在內部使用的日期格式,然後減去兩個日期,減法的結果將再次取決於該日期。在Oracle中,您將使用to_date()
進行轉換,並且減法的結果將是一個表示以天數爲單位的時間的浮點數。
總之,在數據庫的手冊中搜索關於日期處理或數據類型的部分。
Sql Server的近似結果;
select cast(datediff(dd, date1, date2) as float)/30
因爲月份長短不一,爲了簡單起見,我假設一個月內30天。以一位數的精度,這不會有太大的差別,但不要嘗試根據結果值計算新的日期,因爲它們不會100%準確。
(我會試着找到一種方法,更很好地格式化......)
DECLARE @d1 DATETIME
DECLARE @d2 DATETIME
SET @d1 = '2008-04-23'
SET @d2 = '2008-12-31'
SELECT CONVERT(FLOAT, DATEDIFF(mm, @d1, @d2)) + ROUND(CONVERT(FLOAT, DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, @d1, @d2), @d1), @d2) % 30)/30, 1)
這產生了:
8.3
該公式考慮到2008年間「 -04-13'和'2008-11-05',DATEDIFF(mm ...)
返回7,但實際上它不是7個月,而是更少。在這個例子中它返回:
6.7
之前有人問。它是T-SQL。 – Tomalak 2008-10-30 07:44:51