我有兩個字段,Period和YR,週期代表月份。我希望能夠選擇這些記錄作爲日期字段,並假定該日是該月的最後一天。例如:根據月份和年份獲取日期字段
YR Period Date
2017 1 2017-01-31
2017 2 2017-02-28
Etc
我對如何去做這件事感到茫然。感謝您的任何幫助,您可以提供。
我有兩個字段,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