这就是我的情况:我有一个输入日期X(dd-mm-yyyy),我想计算它与年份部分更改为当前年份和今天的SQL日期之间的天数。在临时更改年份后,我会遇到以下情况:(这是我目前对逻辑的看法) - 如果日期X早于今天,那么差异= datediff(X,现在),X年是当前年份 - 如果日期X晚于今天,那么差异= datediff(X,现在),X年是一年之前
示例案例: 第一种情况:输入日期为6-6-1990。今天(自动生成)是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中)?或者还有其他更简单的替代方案可以解决这个问题吗?我也希望在查询中完成此操作而不使用存储过程或函数
很抱歉,如果已经有类似的问题,我只是不知道这个问题的确切关键字:(如果之前有这样的问题,请随时指示我。
提前致谢
答案 0 :(得分: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*/
答案 1 :(得分: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
答案 2 :(得分: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()代替今天日期的字符串
答案 3 :(得分:0)
我在SQL Server 2005的代码中使用了“SELECT DATEDIFF(D,”+ myDate +“,GETDATE())”。它对我有用。值myDate当然是DateTime输入值。
答案 4 :(得分: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