连接字符串到日期的转换

Piyush Bhardwaj

我正在做这样的事情,我有两列月份和年份,我想创建一个新的列,它将以mm / dd / yyy fromat表示。因此,在我的情况下,mm是month列,yyyy是year列,日期默认是01。

update [tablename]
set period= convert(date,month+'/01/'+year)

现在我希望此期间为日期数据类型,我正在做:

alter table [tablename]
alter column period date

但是给我的错误是字符串无法转换为日期。如果有人可以帮助,那将非常有帮助。

亚伦·伯特兰(Aaron Bertrand)

您的表中有错误的数据。因为你没有在第一时间使用正确的数据类型,你可以有所有东西month/year列,因为没有内置的验证那个月是1-12,今年是中值的有效范围。例如,某人本来可以在月份中输入99,而在年份中输入-213。

做这个:

SELECT period FROM dbo.tablename WHERE ISDATE([month] + '/01/' + [year]) = 0;

这应该标识您需要修复的行。如果这返回整个表,或者返回您认为应该是日期的值,则显示一些示例。更新中的语法看起来不正确(至少缺少+),所以我不确定您实际对表执行了什么操作,但是不是。还有一种更安全的格式是:

SET period = [year] + [month] + '01';

这是因为您现在所使用的,mm/dd/yyyy不受区域,语言和日期格式设置的影响。06/05/2013可以解释为5月6日而不是6月5日,并且11/13/2012可能会返回错误,因为SQL Server不知道任何第13个月。这里有很多细节

而且您不需要先将其转换为日期。只需使用ALTER进行操作-当它仍然存储为字符串时,将其转换为日期对您几乎没有帮助...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章