2014-01-30 113 views
0

我有一個表EMP,我需要它們的HIREDATE到現在的月份差異。如何在SQL Server 2008中使用months_between函數?

我用MONTHS_BETWEEN功能,我寫這條SQL語句:

SELECT 
    HIREDATE, SYSDATE, MONTHS_BETWEEN (SYSDATE, HIREDATE) AS DIFF 
FROM 
    EMP 

輸出

HIREDATE  SYSDATE  DIFF 
    --------- --------- ---------- 
    17-DEC-80 31-JAN-14 397.452866 
    20-FEB-81 31-JAN-14 395.356092 
    22-FEB-81 31-JAN-14 395.291576 
    02-APR-81 31-JAN-14 393.936737 

但我需要在SQL Server 2008中相同的輸出,我嘗試使用DATEDIFF功能是這樣的:

Declare @Date1 datetime 
    Declare @Date2 datetime 
    set @Date1 = (SELECT GETDATE()); 
    set @Date2 = (SELECT HIREDATE FROM SCOTT.EMP) 

    SELECT 
     DATEDIFF(MONTH, @Date1, @Date2) AS DifferenceOfDay 

但我得到了錯誤信息:

Msg 512,Level 16,State 1,Line 6
子查詢返回的值超過1。當子查詢遵循=,!=,<,< =,>,> =或當子查詢用作表達式時,這是不允許的。

請幫我在SQL Server 2008中編寫查詢,以獲得相同的輸出...

+0

set @ Date2 =(SELECT HIREDATE FROM SCOTT.EMP) 將返回多行。這將失敗。 – abhi

+0

您可以獲得當日差價並將其轉換爲月份。 – Maverick

回答

0

解決您的原始查詢,請嘗試以下。

SELECT HIREDATE 
    , SYSDATE 
    , DATEDIFF(MONTH, [HIREDATE], GETDATE()) AS DifferenceOfDay 
FROM SCOTT.EMP 

您的原始錯誤是因爲以下變量賦值將返回多個值。

set @Date2 = (SELECT HIREDATE FROM SCOTT.EMP) 
+0

set @ Date2 =(SELECT HIREDATE FROM SCOTT.EMP where ename ='smith')如果我這樣寫我可以有輸出,但我需要所有員工 – user3141052

0

如果你想使用類似的查詢,請使用這個。

SELECT DATEDIFF(M, HIREDATE, GETDATE()) FROM SCOTT.EMP 

以下是DATEDIFF文檔的鏈接。