2017-03-01 176 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 
相关问题