将月份和年份组合转换为 SQL 中的日期

bib*_*hew 5 sql sql-server sql-server-2008

我在不同的列中有月份和年份,我想在两点(即开始日期和结束日期)之间记录。我只有月和年。我发现的一个解决方案是将日期、月份组合转换为日期。假设我有

Start month : 3 Start year : 2010
End month : 6 End year : 2013
Run Code Online (Sandbox Code Playgroud)

我想将它们转换为

 start date = 01-03-2010 

 End date = 31-06-2013
Run Code Online (Sandbox Code Playgroud)

有什么解决办法吗?

小智 7

SqlServer 2012 开始支持DATEFROMPARTS ()。可以这样做:

    DECLARE @Month as int, @Year as int
    SET @Month = 8
    SET @Year = 2018
    SELECT DATEFROMPARTS(@Year,@Month,'01')
Run Code Online (Sandbox Code Playgroud)

要获取该月的最后日期,您可以使用EOMONTH () ,如下所示:

    SELECT EOMONTH(DATEFROMPARTS(@Year,@Month,'01'))
Run Code Online (Sandbox Code Playgroud)


Vig*_*r A 1

正如Marc B所说,结束月会很困难,因为你需要弄清楚指定年/月的最后一天是哪一天。

尝试这个

DECLARE @StartMonth INT = 3 
DECLARE @StartYear INT = 2010 
DECLARE @EndYear INT = 2013 
DECLARE @EndMonth INT = 6 

SELECT Dateadd(year, @StartYear - 2000,Dateadd(month, @StartMonth - 1, '20000101')) AS StartDate, 
       Dateadd(year, @EndYear - 2000, Dateadd(month, @EndMonth - 1, '20000101')) AS EndDate
Run Code Online (Sandbox Code Playgroud)