SQL:如何从月底开始第二天

时间:2015-01-26 02:25:35

标签: sql sql-server

示例:

如果我今天(1月26日)运行此查询,我的结果将在1月27日的+1天加入。

select addedon 
from member
Where Day(addedon) = Day(DateAdd(dd, 1, GetDate()))
and Month(addedon) = Month(DateAdd(dd, 1, GetDate()))

但是,当我在1月31日运行此查询时,它会给我1月1日的结果,而不是2月1日。

请帮忙!请注意,我只能在我的应用程序中使用简单的select语句(如上所述)。

2 个答案:

答案 0 :(得分:1)

要开始下个月:

SELECT DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 1, 0)

这将返回member addedon落在下个月的第一天。

SELECT addedon
FROM member
WHERE
    addedon >= DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 1, 0)
    AND addedon < DATEADD(DD, 1, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 1, 0))

这将返回member第二天addedon落下的SELECT addedon FROM #member WHERE addedon >= DATEADD(DD, DATEDIFF(DD, 0, GETDATE()) + 1, 0) AND addedon < DATEADD(DD, DATEDIFF(DD, 0, GETDATE()) + 2, 0)

{{1}}

答案 1 :(得分:1)

我猜你的datetime - 非常典型 - 以UTC datetime的形式存储在您的数据库中,并且您在西半球的某个地方,并且调用{{例如,在9:30EDT(或8:30CDT)之后的UTC时间上,1}}返回Month,匹配2

大多数情况下,您希望将Month(DateAdd(dd, 1, GetDate()))作为UTC存储在数据库中,这意味着 - 大部分时间 - 您希望以相同的方式编写查询(即使用datetime )。

作为测试,使用GetUtcDate代替GetUtcDate重写您的查询,并查看您的结果是否发生了变化。