我正在做这样的事情, 我有一个月和一年的两列,我想创建一个新的列,将在mm / dd / yyy fromat。所以在我的情况下mm是月份列,yyyy是年份列,日期是默认值01。
update [tablename]
set period= convert(date,month+'/01/'+year)
现在我希望这段时间是日期数据类型,我正在做:
alter table [tablename]
alter column period date
但它给了我错误,字符串无法转换为日期。 如果有人能提供帮助,那将非常有帮助。
答案 0 :(得分:3)
您的表中包含错误数据。由于您没有首先使用正确的数据类型,因此您可以在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个月。 Loads of details here
您无需先将其转换为日期。只需使用ALTER执行此操作 - 将其转换为日期对您来说仍然很少,因为它仍然存储为字符串...