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

Sql server 将字符串YYYY-MM转换为日期YYYY-MM-DD,sql-server,string,date,datetime,type-conversion,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 我想先将它们转换为date,然后使用EOMONTH语法给出一个月的最后一个日期。但是,我尝试使用convert(datetime,EndDate)将数据转换为日期,

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

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
我想先将它们转换为date,然后使用EOMONTH语法给出一个月的最后一个日期。但是,我尝试使用
convert(datetime,EndDate)
将数据转换为日期,但失败了

我在stackoverflow中的一篇文章中尝试了以下语法,但它也给了我错误消息

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

FYI,空白值应保留在列中。 我正在使用SQL Server 2012


谢谢大家的帮助

我认为应该这样做:

CASE WHEN ISNULL(EndDate, '') <> '' THEN EOMONTH(CAST(EndDate + '-01' AS DATETIME)) ELSE EndDate END 
如果为null(EndDate“”),则为EOMONTH(强制转换(EndDate+'-01'为DATETIME)),否则为EndDate END

我认为应该这样做:

CASE WHEN ISNULL(EndDate, '') <> '' THEN EOMONTH(CAST(EndDate + '-01' AS DATETIME)) ELSE EndDate END 
如果为null(EndDate“”),则为EOMONTH(强制转换(EndDate+'-01'为DATETIME)),否则为EndDate END
你很接近

SELECT EOMONTH(TRY_CONVERT(date, EndDate + '-01', 120)) FROM ...
日期样式120是yyyy-mm-dd,但您创建的值是yyyy-mm-dd。另外,您正在将varchar传递到
EOMONTH
中,这时您应该只给它一个日期参数。

您已经接近了

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


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

您能提供错误吗?如果您收到错误,请发布它。
EOMONTH
中的参数是什么数据类型?肯定不是
VARCHAR(MAX)
。那么为什么要转换它呢?zambonee做对了。从字符串转换日期和/或时间时,Msg 241,级别16,状态1,第1行转换失败。我认为空白值导致了错误。明白了。当[EndDate]=''然后''其他EOMONTH(转换(日期,[EndDate]+'-01',120))结束时的情况。谢谢大家的帮助=D加1。你能提供错误吗?如果你有错误,请发布它。
EOMONTH
中的参数是什么数据类型?肯定不是
VARCHAR(MAX)
。那么为什么要转换它呢?zambonee做对了。从字符串转换日期和/或时间时,Msg 241,级别16,状态1,第1行转换失败。我认为空白值导致了错误。明白了。当[EndDate]=''然后''其他EOMONTH(转换(日期,[EndDate]+'-01',120))结束时的情况。谢谢大家的帮助。我仍然有相同的错误消息。从字符串转换日期和/或时间时,Msg 241,级别16,状态1,第1行转换失败。您好,感谢您的帮助。我仍然有相同的错误消息。从字符串转换日期和/或时间时,Msg 241,级别16,状态1,第1行转换失败。Plus1-我建议尝试转换。。。以防出现虚假或意外的dataHi Zambonee,谢谢您的帮助。从字符串转换日期和/或时间时,我仍然收到错误消息Msg 241,级别16,状态1,第1行转换失败。我认为空白值不喜欢被转换成日期。@ AddiySasuuSi我刚刚更新了我的答案以解释意想不到的值。对JohnCappelletti和Zambonee:是的,我更喜欢使用TyyLoad,因为它将把空白单元格转换成NULL,而不是使用列为‘然后’的情况,并将空白单元格转换成1900—01-01。谢谢大家。真的很感激。加1-我建议你试试转换。。。以防出现虚假或意外的dataHi Zambonee,谢谢您的帮助。从字符串转换日期和/或时间时,我仍然收到错误消息Msg 241,级别16,状态1,第1行转换失败。我认为空白值不喜欢被转换成日期。@ AddiySasuuSi我刚刚更新了我的答案以解释意想不到的值。对JohnCappelletti和Zambonee:是的,我更喜欢使用TyyLoad,因为它将把空白单元格转换成NULL,而不是使用列为‘然后’的情况,并将空白单元格转换成1900—01-01。谢谢大家。非常感谢。