2011-08-22 34 views
2

嗯,這是我的情況:我有一個輸入日期X(DD-MM-YYYY),我想計算它與年份之間的天數在SQL中更改爲當前年份和今天的日期。如果日期X早於今天,則差異= datediff(X,現在),其中X年是當前的今年 - 如果日期X是遲於今天,則差值= DATEDIFF(X,現),與X年是前一年如何獲得一個日期在同一年的兩個日期之間的時間差是不是從上年輸入日期

樣本案例: 第一種情況:輸入的日期爲1990年6月6日。今天(自動生成)是22-8-2011。那麼差異將會是= datediff(6-6-2011,22-08-2011) 第二種情況:輸入日期是10-10-1990。今天(自動生成)是22-8-2011。然後差異會= DATEDIFF(10-10-2010,22-08-2011)

任何想法如何在SQL這樣做(在SQL Server)?或者還有其他更簡單的替代方案嗎?我也想這樣做在查詢中,而不是使用存儲過程或功能

對不起,如果已經有一個類似的問題,我只是不知道這個問題的確切關鍵字:(如果有一個問題這樣以前,隨意告訴我那裏。提前

回答

2

基本上,@Andrei的解決方案,但在一個單一的聲明:

SELECT 
    DayDiff = DATEDIFF(
    DAY, 
    DATEADD(YEAR, CASE WHEN LastOcc > GETDATE() THEN -1 ELSE 0 END, LastOcc), 
    GETDATE() 
) 
FROM (
    SELECT LastOcc = DATEADD(YEAR, YEAR(GETDATE()) - YEAR(@InputDate), @InputDate) 
) s 
+0

我已經決定了,因爲我避免使用任何存儲過程/函數中使用這一點,但我還是給我的感謝安德烈給了方式:d 感謝舍甫琴科M和安德烈,你的解決方案完全作品:d – rpa

1

這似乎做的工作

感謝

SELECT DATEDIFF(DAY, CONVERT(DATETIME, N'2011-06-06'), CONVERT(DATETIME, N'2011-08-22')) 

所以基本語法

SELECT DATEDIFF(DAY, CONVERT(DATETIME, N'yyyy-mm-dd'), CONVERT(DATETIME, N'yyyy-mm-dd ')) 

或者,你可以使用GETDATE()而不是字符串今天的日期

0

我曾用 「SELECT DATEDIFF(d, 」+指明MyDate +「,GETDATE())」 在我的代碼,SQL Server 2005上。 這個對我有用。值myDate當然是DateTime輸入值。

0

你應該嘗試此查詢:

create table #T (inp_date datetime) 

insert #T values ('06-06-1990') 
insert #T values ('08-22-1990') 
insert #T values ('10-10-1990') 

--select * from #T 

select inp_date, GETDATE(), 
    CASE 
     WHEN DATEADD(yy,DATEDIFF(yy,inp_date,GETDATE()),inp_date) <= GETDATE() 
      THEN DATEDIFF(dd,DATEADD(yy,DATEDIFF(yy,inp_date,GETDATE()),inp_date),GETDATE()) 
     ELSE DATEDIFF(dd,DATEADD(yy,DATEDIFF(yy,inp_date,GETDATE())-1,inp_date),GETDATE()) 
    END 
from #T 
3

下面是實現(如果我理解的邏輯,你需要正確地):

USE YourDbName 
GO 

CREATE FUNCTION YearPartDiff (@date datetime) 
RETURNS int 
AS 
BEGIN 
    DECLARE @dateCurrentYear datetime 
    SET @dateCurrentYear = DATEADD(year, YEAR(GETDATE()) - YEAR(@date), @date) 

    DECLARE @result int 

    IF @dateCurrentYear < GETDATE() 
     SET @result = ABS(DATEDIFF(day, @dateCurrentYear, GETDATE())) 
    ELSE 
     SET @result = ABS(DATEDIFF(day, DATEADD(year, -1, @dateCurrentYear), GETDATE())) 

    RETURN(@result) 
END 
GO 

和使用的例子:

USE YourDbName 
GO 

DECLARE @someDate datetime 
SET @someDate = '2011-06-06' 

SELECT dbo.YearPartDiff(@someDate) /*returns 77*/ 

SET @someDate = '2010-10-10' 

SELECT dbo.YearPartDiff(@someDate) /*returns 316*/ 
相關問題