如果我只有一年零一个月(而且没有一天),我想知道如何找到一个月的最后一天。
我尝试使用EOMONTH()
,但此功能需要包含年,月和日的日期。我只能使用year
和month
值。
我该怎么办?
答案 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
代码,具体取决于格式......:)