9月19日(每月)-varchar
字符串,我需要做的是将其更改为:
2019年9月30日(每年的MONTH DAY(MONTH DAY))
我正在使用SQL Server 2014。
有什么建议吗?
答案 0 :(得分:2)
这应该有效:
select eomonth(cast('01-' + month_year as date))
我不是2位数年份的粉丝,但这应该适用于很多年份。
答案 1 :(得分:2)
真的,您不应该以这种格式存储或接受日期。
但是考虑到已经存在,并且毫无疑问的是,您将无法修复它,则可以使用样式6(dd MMM yy
)和一些字符串操作来将该格式恢复为正确的日期。但是您必须确保您的语言设置与数据存储方式匹配:
SET LANGUAGE us_english;
DECLARE @my char(6) = 'Sep-19';
SELECT EOMONTH(CONVERT(date, REPLACE('01 '+@my,'-',' '), 6));
我确实不是EOMONTH()
的忠实拥护者,因为这是关于它唯一有用的应用程序。在我自己的代码中,即使更冗长,我也可能会使用类似的东西:
SELECT DATEADD(DAY, -1, DATEADD(MONTH, 1, CONVERT(date, REPLACE('01 '+@my,'-',' '), 6)));
答案 2 :(得分:1)
已经有一些不错的答案了,但是我还是要添加我的答案:
declare @input as nvarchar(100) = 'Sep-19'
select FORMAT(EOMONTH(PARSE(LEFT(@input, 3) + '-01-' + RIGHT(@input, 2) as datetime using 'En-Us')), 'MMMM dd, yyyy')
输出为:“ 2019年9月30日”