gpt4 book ai didi

sql - 获取上个月的第一个和最后一个日期的最简单和最有效的方法是什么?

转载 作者:行者123 更新时间:2023-12-04 18:21:36 27 4
gpt4 key购买 nike

我正在尝试获取上个月的第一天和最后一天。我真正需要的是 BETWEEN 的范围子句,所以我需要第一天的第一秒和最后一天的最后一秒。

这是我一直在使用的代码:

set @startDate = DATEADD(mm, DATEDIFF(mm,0,DATEADD(mm, -1, getdate())), 0)
set @endDate = dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate() ), 0))

但是,对于今天,这实际上是返回 2011 年 4 月 1 日和 2011 年 5 月 1 日,这并不完全准确。我想获得 2011 年 4 月 30 日的最后一秒作为 endDate。

我一直在谷歌搜索,我看到了很多不同的方法来获得一个月的第一天/最后一天。即使在 SO 本身上,我也看到这个问题有许多不同的变体,有许多不同的答案。我想编制一个所有方法的列表来实现这一点,然后确定哪个是“最好的”(基于简单性和效率)

(我应该补充一点,我正在使用 sql server 2000)

编辑:

重新结束日期错误 - 这段代码实际上是正确的,问题只是 @endDate是一个小的日期时间。我将其更改为日期时间,现在可以正常工作

最佳答案

对于日期,我强烈建议不要使用 BETWEEN .您需要从日期中删除 3ms 以获得“前一天的最后一刻”,从而突出显示了这一点。

对于可能具有不同准确度的连续值(而不是离散值),通常最好使用 >= AND < .例如...

WHERE myDateField >= '2012-04-01' AND myDateField < '2012-05-01'

通过这样做,您甚至不需要考虑 myDateField 的准确性。数据或数据类型。它只是工作。总是。

考虑到这一点,您的代码非常接近我将使用的代码......
SET @start = DATEADD(month, DATEDIFF(month, 0, getDate()) - 1, 0)
SET @end = DATEADD(month, DATEDIFF(month, 0, getDate()) , 0)

关于sql - 获取上个月的第一个和最后一个日期的最简单和最有效的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10550286/

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