2015-11-04 92 views
-2

晚上好,我想知道像在oracle中的sql什麼是(SYSDATE-hire_date)/ 12 AS MONTHS和MONTHS_BETWEEN(SYSDATE,hire_date)之間的區別將產生不同的結果。oracle sql開發人員處理月

在此先感謝

+1

'sysdate-hiredate =天數差異,你應該除以30而不是12 – lad2025

+0

就像我需要30天的天數,但是我應該除以12?正如我的講師將我分爲7 –

+1

你的講師說那個月有12天嗎? – lad2025

回答

0

當你得到週數:

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS 
FROM employees WHERE department_id = 90; 

LAST_NAME      WEEKS 
------------------------- ------------ 
King       1481.247 
Kochhar      1363.104 
De Haan      1190.247 

...你除以七,因爲有一個星期七天。

SYSDATE-fire_date表達gives you the number of days出兩個日期之間經過:

SELECT last_name, hire_date, SYSDATE-hire_date AS DAYS, 
    (SYSDATE-hire_date)/7 AS WEEKS 
FROM employees WHERE department_id = 90; 

LAST_NAME     HIRE_DATE   DAYS  WEEKS 
------------------------- ---------- ------------ ------------ 
King      1987-06-17 10368.732  1481.247 
Kochhar     1989-09-21  9541.732  1363.105 
De Haan     1993-01-13  8331.732  1190.247 

因此,有1987年6月17日,今天,2015年11月5日之間的10368整整兩天,加上午夜之間0.732天目前的時間17:34。你可能對分數天不感興趣,所以你可以用trunc()或者SYSDATE或者減法結果;並使用trunc()作爲除以7的結果會給你整週的數量。

你試着去適應這計算月而不是數週,用兩種計算方法:

SELECT last_name, (SYSDATE-hire_date)/12 AS MONTHS1, 
    MONTHS_BETWEEN(SYSDATE, hire_date) AS MONTHS2 
FROM employees WHERE department_id = 90; 

LAST_NAME      MONTHS1  MONTHS2 
------------------------- ------------ ------------ 
King       864.061  340.637 
Kochhar      795.145  313.508 
De Haan      694.311  273.766 

的結果是如此的不同,因爲你誤用12分有十二個月一年,而不是一個月的十二天;你會看到一個類似的差異,如果你試圖通過52分而不是7

仔細相當於是計算週數由30來劃分,如@ lad2025在評論中指出:

SELECT last_name, (SYSDATE-hire_date)/30 AS MONTHS1, 
    MONTHS_BETWEEN(SYSDATE, hire_date) AS MONTHS2 
FROM employees WHERE department_id = 90; 

LAST_NAME      MONTHS1  MONTHS2 
------------------------- ------------ ------------ 
King       345.625  340.637 
Kochhar      318.058  313.508 
De Haan      277.725  273.766 

它仍然不一樣大多數月份沒有完全30天。您通過一十二分之三百六十五,作爲分割得相當接近約30.42:

SELECT last_name, (SYSDATE-hire_date)/(365/12) AS MONTHS1, 
    MONTHS_BETWEEN(SYSDATE, hire_date) AS MONTHS2 
FROM employees WHERE department_id = 90; 

LAST_NAME      MONTHS1  MONTHS2 
------------------------- ------------ ------------ 
King       340.890  340.637 
Kochhar      313.701  313.508 
De Haan      273.920  273.766 

但它不會是相同的(除非是一些短週期),因爲該算法是不一樣的,而這還不佔閏年。使用months_between()更簡單,更安全。

+0

謝謝..這也是有益的... –