您的表中有错误的数据。由于您一开始没有使用正确的数据类型,因此/列中可能有任何内容,因为没有内置验证该月份为 1-12 并且年份在有效值范围内。例如,有人可以在月中输入 99,在年中输入 -213。month
year
做这个:
SELECT period FROM dbo.tablename WHERE ISDATE([month] + '/01/' + [year]) = 0;
这应该确定您需要修复的行。如果这会返回整个表格,或者返回您认为应该是日期的值,那么请展示一些示例。您更新中的语法看起来不正确(至少缺少 a +
)所以我不确定您实际上对您的表运行了什么,但事实并非如此。还有一种更安全的格式是:
SET period = [year] + [month] + '01';
这是因为您现在使用的 ,mm/dd/yyyy
不受区域、语言和日期格式设置的影响。06/05/2013
可以解释为 5 月 6 日而不是 6 月 5 日,并且11/13/2012
可能返回错误,因为 SQL Server 不知道任何第 13 个月。这里有很多细节。
而且您不需要先将其转换为日期。只需使用 ALTER 执行此操作 - 当它仍存储为字符串时,将其转换为日期对您几乎没有作用......