每n个月的第n个工作日的日期,我需要知道在SQL Server中每隔n个月的第n个工作日的日期。例如,我需要从2015年1月1日,第二日的所有日期至12月30日,2015年 它是让平日日期。如第一个星期一或第三个星期二的第三个月之间的日期范围。获取在SQL Server
回答
这应该例如,返回所有3星期二:
;WITH AllDates AS (
SELECT CAST('2015' + Mnth + Dy AS date) AS Dt
FROM (
SELECT '01' AS Mnth UNION SELECT '02' UNION SELECT '03' UNION SELECT '04'
UNION SELECT '05' UNION SELECT '06' UNION SELECT '07' UNION SELECT '08'
UNION SELECT '09' UNION SELECT '10' UNION SELECT '11' UNION SELECT '12'
) AS Mnths
CROSS JOIN (
SELECT '01' AS Dy UNION SELECT '02' UNION SELECT '03' UNION SELECT '04'
UNION SELECT '05' UNION SELECT '06' UNION SELECT '07' UNION SELECT '08'
UNION SELECT '09' UNION SELECT '10' UNION SELECT '11' UNION SELECT '12'
UNION SELECT '13' UNION SELECT '14' UNION SELECT '15' UNION SELECT '16'
UNION SELECT '17' UNION SELECT '18' UNION SELECT '19' UNION SELECT '20'
UNION SELECT '21' UNION SELECT '22' UNION SELECT '23' UNION SELECT '24'
UNION SELECT '25' UNION SELECT '26' UNION SELECT '27' UNION SELECT '28'
UNION SELECT '29' UNION SELECT '30' UNION SELECT '31'
) AS Dys
WHERE ISDATE('2015' + Mnth + Dy) = 1
), AllDatesWithInfo AS (
SELECT Dt, DATENAME(weekday, Dt) AS WeekDay, ROW_NUMBER() OVER (PARTITION BY YEAR(Dt), MONTH(Dt), DATENAME(weekday, Dt) ORDER BY Dt) AS NumberOfThisWeekDayInMonth
FROM AllDates
)
SELECT *
FROM AllDatesWithInfo
WHERE WeekDay = 'Tuesday'
AND NumberOfThisWeekDayInMonth = 3
ORDER BY Dt
如果有人知道一个更好的方式来获得“AllDates”虚表,我很想听听它... –
你可能想看看,以我在我的答案提供的链接... – Shnugo
这的确更少的代码它会产生更多的可能性。我会记住这一技巧,谢谢。 –
前段时间我回答这里的另一个问题: https://stackoverflow.com/a/32474751/5089204
总之:创建一个流水号表( - >帐簿表) 。这种表是在许多情况下是非常帅气的 - 一个人应该有这样的事情反正...它并不需要很多,但它会帮助你肯定...
出此表,你可以得到所有需要的数据用简单的'SELECT'。也许你必须添加更多列并填充它们以轻松获取数据。但是,这不应该是一个问题...
这将是结果(深运行到今年2173)
Number CalendarDate CalendarYear CalendarMonth CalendarDay CalendarWeek CalendarYearDay CalendarWeekDay
0 1900-01-01 1900 1 1 1 1 1
1 1900-01-02 1900 1 2 1 2 2
2 1900-01-03 1900 1 3 1 3 3
3 1900-01-04 1900 1 4 1 4 4
4 1900-01-05 1900 1 5 1 5 5
5 1900-01-06 1900 1 6 1 6 6
出于性能方面这将是很好设定指标!
- 1. 获取在SQL Server
- 2. DBCheckComboBox获取值在SQL Server
- 3. 获取在SQL Server 2005中
- 4. 获取XML在SQL Server
- 5. SQL Server - 获取表
- 6. 获取从SQL Server
- 7. PHP sql server获取行数
- 8. 获取是从SQL Server
- 9. SQL Server获取行数
- 10. SQL Server:获取中值
- 11. 在SQL Server中获取引用表
- 12. 获取文件名在SQL Server存储
- 13. 在VB.NET中从SQL Server获取值
- 14. 在ASP.net中获取sql server响应
- 15. 获取查询的列名在SQL Server
- 16. 插入后获取ID在SQL Server中
- 17. 在SQL Server 2008 R2中获取时区
- 18. 数据从SQL Server获取在VBA
- 19. 在SQL Server中获取当前日期?
- 20. SQL Server。获取零在内的额头
- 21. 如何在SQL Server 2012上获取GUI
- 22. 在函数内执行动态SQL时获取错误(SQL Server)?
- 23. 查询来获取耗时在SQL Server SQL语句
- 24. 获取在Sql Server中修改表的SQL用户名
- 25. 如何在SQL Server Profiler中获取SQL Server查询的参数值
- 26. SQL Server获取自定义列值
- 27. Excel没有从SQL Server获取数据
- 28. 从SQL Server的DateTime字段获取'date'
- 29. SQL Server:获取“两天前”日期
- 30. 获取父级SQL Server变量hierarchyid
这被标记为重复,但问题是关于这个月的日子里,没有工作日。 –
嗨Awadesh,那将是非常客气这里看看。 [someone-answers](http://stackoverflow.com/help/someone-answers),thx! – Shnugo