gpt4 book ai didi

sql-server - 日期差异舍入

转载 作者:行者123 更新时间:2023-12-02 10:57:16 24 4
gpt4 key购买 nike

我在 SQL Server 中有一个数据库表,其中包含项目的开始日期。

在网络状态页面上,我想显示项目已运行多少天/周/月,单位取决于持续时间。因此,在 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

产生

days: 59    weeks: 9    months: 2

但实际上相差 8 整周,并且进行了一些舍入。

我也尝试过在 ASP 中执行此操作,获取开始日期,然后执行 datediff(),但效果并不好。

有更好的方法吗?

谢谢

最佳答案

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

月份比较复杂,因为每个月都有所不同。但您可以比较天数(每月)来更正该值。

SELECT
datediff(month, '20101230', getdate()) -
CASE WHEN DATEPART(day, '20101230') > DATEPART(day, getdate()) THEN 1 ELSE 0 END
as months

关于sql-server - 日期差异舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5131958/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com