从 MMM(M)YYYY 中提取月份的最后一天

Extract last day of the month from MMM(M)YYYY

如何从

这样的日期中提取月份的最后一天

2009 年 12 月、2013 年 4 月、2008 年 8 月、2017 年 11 月、2014 年 7 月等

我已经尝试过 datepart、convert、cast、month、year,但我总是遇到类型转换错误。

使用try_converteomonth()

declare @date varchar(7)='jul2014'

select Day(EOMonth(Try_Convert(date, @date)))

您可以尝试以下方法:

SELECT
    dt,
    DATEADD(day, -1, DATEADD(month, 1,
                         CONVERT(datetime, '01' + dt, 106))) AS dt_eom
FROM yourTable;

Demo

这里的策略是首先从例如DEC2009 字符串 01DEC2009。然后,我们使用 CONVERT 和掩码 106。我们通过加一个月然后减去一天来获得该月的最后一天。

你可以用这个

DECLARE @date VARCHAR(20)='DEC2009'

SELECT Day(CONVERT(NVARCHAR,CAST(DATEADD(MM,DATEDIFF(MM, -1, @date),-1) AS 
DATE),100))

SELECT
date,
Day(CONVERT(NVARCHAR,CAST(DATEADD(MM,DATEDIFF(MM, -1, date),-1) AS 
DATE),100)) AS date_eom
FROM Table;

您可以使用 EOMONTH 函数获取一个月中的最后一天。

首先构造一个实际的日期值:在开头添加01,然后使用样式106 进行转换。如果您只是使用 CONVERTCAST 而没有样式参数,您可能会 运行 由于当地文化而出现问题。相反,您应该明确指定样式。

SELECT
    dt,
    EOMONTH( CONVERT(date, '01' + dt, 106) ) AS dt_eom
FROM yourTable;

db<>fiddle

谢谢大家(Larnu 似乎没看懂或回答问题除外)

你的有用建议,特别是“TRY_CONVERT”让我能够处理两个条目,其中月份是 4 个字符的字段。我的最终代码是:

EOMONTH(CONVERT(DATE, LEFT(TRIM(myField),3) + RIGHT(TRIM(myField),4)))

而且效果很好。 :)

快乐的日子!