我在SQL Server中有一个db表,它包含项目的开始日期.
在Web状态页面上,我想显示项目运行的天数/周/月,单位取决于持续时间.因此,在21天内,我会显示几天,在7周内我会显示几周,否则显示已完成的几个月.所以我得到了几天,几周和几个月的值,然后可以使用一些代码来决定要显示哪一个.
假设该项目于2010年12月30日开始,我今天正在检查(2011年2月27日).
select datediff(d,'30 Dec 2010',getdate()) as days,
datediff(wk,'30 Dec 2010',getdate()) as weeks ,
datediff(m,'30 Dec 2010',getdate())as months
Run Code Online (Sandbox Code Playgroud)
产生
days: 59 weeks: 9 months: 2
Run Code Online (Sandbox Code Playgroud)
但实际上差异是整整八周,并且会发生一些四舍五入.
我也试过在ASP中做到这一点,得到开始日期然后做日期()但它没有更好.
有没有更好的办法?
谢谢
gbn*_*gbn 13
DATEDIFF使用日期部分的边界.因此,对于"日",今天23:59是明天00:01之前的一整天.
这些类型的计算最好使用相同的单位完成.
;WITH cDayDiff AS
(
select datediff(day,'20101230',getdate()) as days
)
SELECT
days / 7 as weeks, --integer division
days % 7 as remainingdays
FROM
cDayDiff
Run Code Online (Sandbox Code Playgroud)
由于每个月都有所不同,因此月份很凶悍 但您可以比较日期数(每月)来更正该值.
SELECT
datediff(month, '20101230', getdate()) -
CASE WHEN DATEPART(day, '20101230') > DATEPART(day, getdate()) THEN 1 ELSE 0 END
as months
Run Code Online (Sandbox Code Playgroud)