连接字符串到日期转换

时间:2013-10-25 13:39:19

标签: sql sql-server-2008

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

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

现在我希望这段时间是日期数据类型,我正在做:

alter table [tablename]
alter column period date

但它给了我错误,字符串无法转换为日期。 如果有人能提供帮助,那将非常有帮助。

1 个答案:

答案 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执行此操作 - 将其转换为日期对您来说仍然很少,因为它仍然存储为字符串...