如何只使用月份和年份来获得本月的最后一天?

时间:2016-08-04 20:01:42

标签: sql tsql sql-server-2012

如果我只有一年零一个月(而且没有一天),我想知道如何找到一个月的最后一天。

我尝试使用EOMONTH(),但此功能需要包含年,月和日的日期。我只能使用yearmonth值。

我该怎么办?

3 个答案:

答案 0 :(得分:6)

如果您使用的是Sql Server 2012,那么我将使用DATEFROMPARTS。

DECLARE @year SMALLINT = 2016
    ,@month TINYINT= 02

SELECT EOMONTH(DATEFROMPARTS(@year,@month,1))

答案 1 :(得分:2)

即使您没有月中的某一天,仍然可以使用EOMONTH,只需使用当月的第一天,因为输入中的月中日期不重要。

-- incoming parameters (assuming string but could be int and you could cast them)
DECLARE @month VARCHAR(2) = '11', @year VARCHAR(4) = '2016'

DECLARE @date DATETIME
DECLARE @lastDayOfMonth INT

SELECT @date = CONVERT(date, @year + @month + '01', 101) -- this first part is what you know (year + month), the 01 is just the first day of whatever month appended so the date is valid
-- get the last day of month as a date using EOMONTH and then use DATEPART to get the day of the month
SELECT @lastDayOfMonth = DATEPART(dd, EOMONTH(@date))

SELECT @lastDayOfMonth -- your output on the screen

答案 2 :(得分:1)

VARCHAR TYPES

DECLARE @D DATE
DECLARE @YearV VARCHAR(4) = '2016'
DECLARE @MonthV VARCHAR(2) = '12'

SET @D = DATEADD(dd,-1,DATEADD(mm,1,CAST(@YearV + @MonthV + '01' AS DATE)))

SELECT @D

INT TYPES

DECLARE @D DATE
DECLARE @Year INT = '2016'
DECLARE @Month INT = '11'

SET @D = DATEADD(dd,-1,DATEADD(mm,1,CAST(CAST(@Year AS VARCHAR(4)) + CAST(@Month AS VARCHAR(2)) + '01' AS DATE)))

SELECT @D

组合类型

一些SUBSTRING代码,具体取决于格式......:)