【发布时间】:2013-05-12 22:29:21
【问题描述】:
我创建了一个查询来获取用户的出生日期并将年份更改为当前年份(不想显示实际出生日期)
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 年?
【问题讨论】:
-
是为所有用户设置了
BirthDay,还是还包含NULL值? -
@NielsKeurentjes 不是为所有用户设置的,所以我尝试了
WHERE BirthDay IS NOT NULL,结果相同。 -
生日是 2 月 29 日吗?没有 2013 年 2 月 29 日。如果将
CAST(YEAR(GETDATE()) as varchar)替换为硬编码字符串'2013'会发生什么? -
@AdamPorad +1,没想到 2 月 29 日呵呵。
标签: sql-server date casting