根据月份和年份获取日期字段
问题描述:
我有两个字段,Period和YR,周期代表月份。我希望能够选择这些记录作为日期字段,并假定该日是该月的最后一天。例如:根据月份和年份获取日期字段
YR Period Date
2017 1 2017-01-31
2017 2 2017-02-28
Etc
我对如何去做这件事感到茫然。感谢您的任何帮助,您可以提供。
答
SELECT YR, Period, EOMONTH(DATEFROMPARTS(YR, Period, 1)) AS [Date]
FROM <<table>>
答
这是你能如何使用 “基本” 的功能做到这一点:
; with data as (
select 2017 as yr, 1 as period
union all
select 2017 as yr, 2 as period
)
, temp as (
select
yr,
period,
dateadd(day, -1, dateadd(month, 1,
convert(datetime, cast(yr*10000 + period*100 + 1 as varchar))
)
) as test
from data
)
select yr, period, convert(varchar(10), test, 126) from temp
答
这里是另一个查询:
WITH tb(YR,Period)AS(
SELECT 2017,1 UNION ALL
SELECT 2017,2 UNION ALL
SELECT 2017,3
)
SELECT DATEADD(DAY,-1,DATEADD(MONTH,tb.Period+1, DATEADD(YEAR, YR-1900,0))) FROM tb
----------------------- 2017-02-28 00:00:00.000 2017-03-31 00:00:00.000 2017-04-30 00:00:00.000
[坏习惯踢:使用速记与日期/时间操作 - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx ) – SqlZim
@SqlZim谢谢你的建议;我相应地编辑了这篇文章。 –
还有一件事,不是建立一个yyyy-m-dd字符串,而是建立一个yyyymmdd字符串。 [#BackToBasics:负责任的约会 - 亚伦伯特兰](https://blogs.sentryone.com/aaronbertrand/backtobasics-dating-responsibly/) – SqlZim