1

我创建了一个查询来获取用户的出生日期并将年份更改为当前年份(不想显示实际出生日期)

CAST(
  CAST(YEAR(GETDATE()) as varchar) + '-' +
  CAST(MONTH(BirthDay) as varchar) + '-' +
  CAST(DAY(BirthDay) as varchar) 
as date)

当我对我的表运行它时,我收到以下错误:

Msg 241, Level 16, State 1, Line 1
Conversion failed when converting date and/or time from character string.

我能够让查询在SQLFiddle上正常工作

为了对查询进行故障排除,我逐步检查了每个CAST()函数,每个函数都单独工作。当我更改GETDATE()BirthDay时,查询正常工作,但这不喜欢使用GETDATE(). 该函数将运行并获取大约 400 条记录,然后返回上面的错误消息。

有没有办法找到导致这个问题的实际记录,或者有没有更好的方法来获取日期的月份和日期并将其设为 2013 年?

4

1 回答 1

3

我认为闰年是你的问题,其中一个生日值是闰年的 2 月 29 日。所以发生错误是因为没有 2013 年 2 月 29 日。

为了验证这个假设:

  • 如果CAST(YEAR(GETDATE()) as varchar)用硬编码字符串替换会发生什么'2013'
  • 如果你用'2012'闰年代替它呢?
  • 或者正如 Niels Keurentjes 在评论中巧妙地建议的那样,只需查询数据以查看是否有 2 月 29 日生日select * from Users where month(BirthDay) = 2 and day(BirthDay) = 29
于 2013-05-17T17:10:01.557 回答