【问题标题】:converting String YYYY-MM to Date YYYY-MM-DD将字符串 YYYY-MM 转换为日期 YYYY-MM-DD
【发布时间】:2018-05-19 18:28:25
【问题描述】:

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

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

感谢大家的帮助。

【问题讨论】:

  • 你能提供错误吗?
  • 如果您遇到错误,请发布。 EOMONTH 的参数是什么数据类型?肯定不是VARCHAR(MAX)。那为什么要转换呢?
  • 赞博尼做对了。
  • Msg 241, Level 16, State 1, Line 1 从字符串转换日期和/或时间时转换失败。我认为空白值会导致此错误。
  • 明白了。 [EndDate] = '' then '' else EOMONTH(CONVERT(date, [EndDate] + '-01', 120)) 结束的情况。谢谢大家的帮助=D。为所有人加 1。

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


【解决方案1】:

你很接近!

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

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

【讨论】:

  • Plus1 - 我只是建议 try_convert ...以防出现虚假或意外数据
  • 嗨赞博尼,感谢您的帮助。从字符串转换日期和/或时间时,我仍然收到错误消息 Msg 241, Level 16, State 1, Line 1 Conversion failed。我认为空白值不喜欢转换为日期。
  • @AdhityaSanusi 我刚刚更新了我的答案以解决意外值。
  • 致 JohnCappelletti 和 Zambonee:是的,我更喜欢使用 try_convert,因为它会将空白单元格转换为 NULL,而不是使用 CASE,其中列是 '' 然后 '' 并将空白单元格转换为 1900-01-01。非常感谢你们。真的很感激。
【解决方案2】:

我认为应该这样做:

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

【讨论】:

  • 您好,感谢您的帮助。我仍然有同样的错误信息。消息 241,级别 16,状态 1,第 1 行从字符串转换日期和/或时间时转换失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多