将字符串YYYY-MM转换为日期YYYY-MM-DD

时间:2017-12-06 00:06:59

标签: sql-server string date datetime type-conversion

下面有一组数据,它们都是字符串。

EndDate
--------
2017-04

2017-02
2017-01
2017-03

2017-06

我想将月份的最后日期添加到其中。

EndDate
--------
2017-04-30

2017-02-28
2017-01-31
2017-03-31

2017-06-30

我正在考虑先将它们转换为日期并使用EOMONTH语法来指定该月的最后日期。但是我尝试使用convert(datetime, EndDate)将数据转换为日期,但它失败了。

我在stackoverflow中的帖子中尝试了下面的语法,但它也给了我错误消息。

EOMONTH(CONVERT(VARCHAR(max),CAST(EndDate + '01' AS DATETIME),120))

仅供参考,空白值应保留在列中。

我正在使用SQL Server 2012

感谢大家的帮助。

2 个答案:

答案 0 :(得分:3)

你很亲密!

SELECT EOMONTH(TRY_CONVERT(date, EndDate + '-01', 120)) FROM ...

日期样式120是yyyy-mm-dd,但您创建的值是yyyy-mmdd。另外,当你应该给它一个日期参数时,你将varchar传递给EOMONTH

答案 1 :(得分:1)

我认为应该这样做:

CASE WHEN ISNULL(EndDate, '') <> '' THEN EOMONTH(CAST(EndDate + '-01' AS DATETIME)) ELSE EndDate END