在SQL Server中将int转换为日期

时间:2014-01-31 21:07:47

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

Year(int)  Month(int)   ProductName     Date(DateTime)
   2013         11        ACB          
   2013         11        CDE

我正在尝试更新上表中的Date值。

此查询不起作用。

我可以将int转换为datetime吗?

UPDATE t
SET t.[Date] = convert(date, convert(int, 
                       t.[Year]) + '-' + convert(int, t.[Month]) + '-01')
FROM Table t

1 个答案:

答案 0 :(得分:4)

您正在尝试添加整数和字符串。这不是Visual Basic 6.0;您需要更明确地使用数据类型转换,尤其是在尝试使用数字类型构建字符串时。

当然,有更容易和更有效的方法来做到这一点,而不是打扰任何笨重的字符串转换:

UPDATE dbo.Table
  SET [Date] = DATEADD(MONTH, [Month]-1, DATEADD(YEAR, [Year]-1900, 0));

在SQL Server 2012中(不确定为什么要标记3个不同的版本):

UPDATE dbo.Table
  SET [Date] = DATEFROMPARTS([Year],[Month],1);

在任何一种情况下都没有理由使用FROM ...