2015-04-01 67 views
0

enter image description here如何查看結果日期時間DATEDIFF DATEADD,但超出範圍的值

我現在嘗試比較日期和開始日期從master_employee工作。 但我失敗了......

如果在行我寫

select @date = date_start 
from Master_Employee 
where id = '2' 

的更迭。 但我希望可以查看Master_Employee表中的所有結果。

你能幫助我嗎? 感謝的非常..

DECLARE @date DATETIME 
    ,@tmpdate DATETIME 
    ,@years INT 
    ,@months INT 
    ,@days INT 

SELECT @date = date_Start 
FROM Master_Employee 

SELECT @tmpdate = @date 

SELECT @years = DATEDIFF(yyyy, @tmpdate, GETDATE()) - CASE 
     WHEN (MONTH(@date) > MONTH(GETDATE())) 
      OR (
       MONTH(@date) = MONTH(GETDATE()) 
       AND DAY(@date) > DAY(GETDATE()) 
       ) 
      THEN 1 
     ELSE 0 
     END 

SELECT @tmpdate = DATEADD(yyyy, @years, @tmpdate) 

SELECT @months = DATEDIFF(mm, @tmpdate, GETDATE()) - CASE 
     WHEN DAY(@date) > DAY(GETDATE()) 
      THEN 1 
     ELSE 0 
     END 

SELECT @tmpdate = DATEADD(mm, @months, @tmpdate) 

SELECT @days = DATEDIFF(dd, @tmpdate, GETDATE()) 

SELECT @years AS Years 
    ,@months AS Months 
    ,@days AS Dayss 
    ,GETDATE() AS Date_Now 
+0

請發佈您的SQL作爲文本。 – 2015-04-01 10:53:42

+0

好吧,我已經編輯我的問題.... btw謝謝.. – SimanisJKT48 2015-04-01 10:58:16

+1

你究竟想要達到什麼目的? – 2015-04-01 10:59:34

回答

1

這會給你多少天,月,年已聚集起來傳遞的所有員工,至於我可以告訴這是你在搭售做什麼。

DECLARE @Today as datetime = CONVERT(Date,GETDATE()) 

SELECT SUM(DATEDIFF(day,ISNULL(convert(datetime,@date),Today),@Today)) [Days] 
    ,SUM(DATEDIFF(MONTH,ISNULL(convert(datetime,@date),Today),@Today)) [Months] 
    ,SUM(DATEDIFF(Year,ISNULL(convert(datetime,@date),Today(,@Today)) [Years] 
FROM Master_Employee 

之所以

SELECT @date = date_Start 
FROM Master_Employee 

失敗是因爲你想分配所有的開始日期同一個變量。

如果你想爲每個員工嘗試不同的行:

DECLARE @Today as datetime = CONVERT(Date,GETDATE()) 

SELECT Id 
    ,SUM(DATEDIFF(day,ISNULL(convert(datetime,@date),Today),@Today)) [Days] 
    ,SUM(DATEDIFF(MONTH,ISNULL(convert(datetime,@date),Today),@Today)) [Months] 
    ,SUM(DATEDIFF(Year,ISNULL(convert(datetime,@date),Today),@Today)) [Years] 
FROM Master_Employee 
GROUP BY ID 

要小心,月和年可能會產生誤導,如果一個人開始12/31/14,你跑這對1/1/15你會看到1天,1個月, 1年。你可能會更好地使用只有幾天,並找出自己的數學多長時間...

+0

非常感謝丹尼爾.. 順便說一句.. tipe variabel date_start是varchar ..我如何轉換? 我已經將您的查詢結果爲n結果爲「轉換日期和/或時間字符串時轉換失敗 警告:空值由集合或其他SET操作消除。 – SimanisJKT48 2015-04-01 11:15:25

+0

您使用的是什麼版本的SQL? 'date_start'是什麼格式? – 2015-04-01 11:17:22

+0

sql server 2008 r2。格式date_start是varchar。示例內容'20150202'.. – SimanisJKT48 2015-04-01 11:19:04

相關問題