我想找到的第一天,在SQL查询一个月
我想找一个月,也像第3天或第5天,15天或一个月。所以任何一天的第一天一个月的任何其他如何找到通过查询。我知道如何找到第一天和最后一天的月份。我想找到其他的日子。我想找到的第一天,在SQL查询一个月
如果你知道如何寻找了一个月的第一天,你可以添加2天,4天或14天的间隔到一个月的第一天获得,分别为第三,该月的第5天或第15天。
同样,你可以通过简单地增加天适当数量得到了一个月的任何一天。
不同的RDBMS中可能提供不同的语法来实现这一目标。假设@MonthBeginning
是代表一个月份的第一天,date
或datetime
值,这里是你如何能得到的,例如,同月的Microsoft SQL Server中的第5天:
SELECT DATEADD(day, 4, @MonthBeginning) AS FifthDay
此外,也可以不如果您的RDBMS不是MS SQL Server,那么应该这样做。
对于那些沿着谁可能不知道如何让SQL Server中,你可以像这样的东西做一个月的第一天以下。这也会给你第五,第十或任何你需要的。
DECLARE @FirstDay DATETIME
SET @FirstDay = (DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE()) - 1, -1) + 1)
SELECT GETDATE() AS CurrentDay
, @FirstDay AS FirstDay
, DATEADD(d, 10, @FirstDay-1) AS TenthDay
-1后的使用DateAdd的@FirstDay是因为使用DateAdd将增加的天数到firstday,这将给你在这个例子中第11位。当然,你可以只添加一天,使其在没有-1的情况下工作,但我更愿意包括它。你自便。
'DATEDIFF(MONTH,-1,GETDATE()) - 1'基本上等于'DATEDIFF(MONTH,0,GETDATE())',不是吗?实际上,所有的计算都可以简化为'DATEADD(month,DATEDIFF(MONTH,0,GETDATE()),0)'。无论如何,你的方法正在工作。除此之外,将'@ FirstDay-1'的实际天数加上,尽管相当于我的建议,似乎是一个更好的主意(我认为更符合逻辑)。 – 2011-03-02 21:07:20
我喜欢你的简化,然后再使用一个。 – 2011-03-02 21:43:32
你正在使用什么RDBMS? – 2011-03-02 12:50:00
如果您正在使用SQL Server看看这里http://blog.sqlauthority.com/2007/08/18/sql-server-find-last-day-of-any-month-current-previous-next/和然后按照Andriy的帖子。 – 2011-03-02 16:37:37