我需要在两个日期范围之间获取日期。那是第n个月的第n天。 例如,我需要知道2015年1月1日到2015年12月30日之间每两个月的第23天。
我需要在SQL Server的T-SQL中查询
答案 0 :(得分:0)
这是你想要实现的目标吗?
DECLARE @startDate datetime
DECLARE @endDate datetime
DECLARE @monthToFind INT
DECLARE @dayToFind INT
SET @startDate = '01/01/2015'
SET @endDate = '12/31/2015'
SET @monthToFind = 2
SET @dayToFind = 20
IF MONTH(@startDate) + (@monthToFind - 1) BETWEEN MONTH(@startDate) AND MONTH(@endDate)
AND YEAR(@startDate) = YEAR(@endDate)
BEGIN
DECLARE @setTheDate datetime
SET @setTheDate = CAST(MONTH(@startDate) + (@monthToFind - 1) AS varchar) + '/' + CAST(@dayToFind AS varchar) + '/' + CAST(YEAR(@startDate) AS varchar)
SELECT DATENAME(DW,@setTheDate)
END
答案 1 :(得分:0)
您应该在MSSQL中使用递归查询。
此处第一个WITH DT
是您设置条件的表格:
WITH DT AS
(
SELECT CAST('January 1, 2015' as datetime) as dStart,
CAST('December 30, 2015' as datetime) as dFinish,
31 as nDay,
2 as nMonth
),
T AS
(
SELECT DATEADD(DAY,nDay-1,
DATEADD(MONTH, DATEDIFF(MONTH, 0, DStart), 0)
) as d,0 as MonthNumber
FROM DT
UNION ALL
SELECT DATEADD(DAY,nDay-1,
DATEADD(MONTH, DATEDIFF(MONTH, 0, DStart)
+T.MonthNumber+nMonth,0)
)as d, T.MonthNumber+nMonth as MonthNumber
FROM T,DT
WHERE DATEADD(DAY,nDay-1,
DATEADD(MONTH, DATEDIFF(MONTH, 0, DStart)
+T.MonthNumber+nMonth,0)
)<=DT.dFinish
)
SELECT d FROM T,DT WHERE DAY(d)=DT.nDay
答案 2 :(得分:0)
这显然是家庭作业,家庭作业的重点是学习如何运作和解决问题,而不是让别人为你做。所以 - 正确执行此操作的指针,而不是复制和粘贴的答案。
把这些碎片弄乱了一会儿,你就可以解决了。