2017-03-01 215 views
1

我有兩個字段,Period和YR,週期代表月份。我希望能夠選擇這些記錄作爲日期字段,並假定該日是該月的最後一天。例如:根據月份和年份獲取日期字段

YR Period  Date 
2017 1   2017-01-31 
2017 2   2017-02-28 
Etc 

我對如何去做這件事感到茫然。感謝您的任何幫助,您可以提供。

回答

5
SELECT YR, Period, EOMONTH(DATEFROMPARTS(YR, Period, 1)) AS [Date] 
FROM <<table>> 
1

這是你能如何使用 「基本」 的功能做到這一點:

; 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 
+2

[壞習慣踢:使用速記與日期/時間操作 - Aaron Bertrand](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx ) – SqlZim

+1

@SqlZim謝謝你的建議;我相應地編輯了這篇文章。 –

+1

還有一件事,不是建立一個yyyy-m-dd字符串,而是建立一個yyyymmdd字符串。 [#BackToBasics:負責任的約會 - 亞倫伯特蘭](https://blogs.sentryone.com/aaronbertrand/backtobasics-dating-responsibly/) – SqlZim

0

這裏是另一個查詢:

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 
相關問題