2013-07-25 178 views
0

我在表中使用格式'01 -JAN-99'的日期列。我需要顯示當前日期,使用sysdate和我的表中的日期之間的差異。但我必須按年份和月份顯示它。所以如果日期是148個月前,那麼它會顯示12年和4個月。在SQL中顯示當前日期的年份和月份

回答

3

假設列實際上是一個DATE(不具有格式),而不是一個VARCHAR2表示日期(這將有格式),你會想是這樣

TRUNC(months_between(sysdate, date_column)/ 12) || ' Years and ' || 
TRUNC(MOD(months_between(sysdate, date_column), 12) || ' Months.' 

這是假設如果差異是你想忽略小數的月份數。如果您想四捨五入到最近的月份,請在計算月數中將TRUNC替換爲ROUND

+0

謝謝,這工作!另一個簡單的問題是,如果我使用兩次相同的表別名,這真的很重要嗎?例如,我有一些像SELECT e.column,i.column FROM table1 e,table2 i;後來我有CREATE VIEW查看AS SELECT e.column,i.column FROM table1 e,table2 i;它給了我一個「名稱已被現有對象使用」的錯誤,但該視圖似乎已經創建而沒有問題。 – user2616744

+0

@ user2616744 - 這應該是一個單獨的問題,但是,是的,它確實很重要。視圖中不能有兩列命名爲相同的東西,就像在一個表中不能有兩個具有相同名稱的列一樣。 –

0

試試這個腳本:

SELECT TRUNC (MONTHS_BETWEEN (sysdate, date_col)/12) || ' YEARS ' 
     || MOD (TRUNC (MONTHS_BETWEEN (sysdate, date_col)), 12) || ' MONTHS ' 
     || (TO_DATE (sysdate) – ADD_MONTHS (date_col,TRUNC (MONTHS_BETWEEN (sysdate, date_col)))) || ' DAYS' 
FROM DUAL; 
-1

這個工作對我來說:

SELECT DATEDIFF(yy, '04/01/1999 00:00:00', GETDATE()) AS Years, DATEDIFF(m, '04/01/1999 00:00:00', GETDATE()) - (DATEDIFF(yy, '04/01/1999 00:00:00', GETDATE()) * 12) AS Months 

理想的日期(04/01/1999' )將是一列或參數,以避免重複。

+1

'DATEDIFF'是一個SQL Server函數。這不是Oracle中可用的 –

+0

然後,不要將它標記爲SQL - 雖然我沒有看到oracle標記,但是我的錯誤。 – andrewb

+0

「SQL」標籤用於涉及結構化查詢語言的問題。這是一個非常重要的SQL問題。它恰好是關於Oracle數據庫的SQL實現。如果你想尋找關於SQL Server的問題,你需要尋找像'sql-server'這樣的標籤。 –

相關問題