SQL从年份和数字字段创建日期时间

SQL从年份和数字字段创建日期时间,sql,sql-server,sql-server-2008,reporting-services,ssrs-2008,Sql,Sql Server,Sql Server 2008,Reporting Services,Ssrs 2008,我在视图中有两列,它们为我提供了日期部分 它们是月数和年数 我需要一个新的列,它是一个日期/时间字段。它必须是其他两列提供的月份和年份的第一个 i、 e42011需要 2011-04-01 00:00:00.000 在新专栏中 当前设置如下所示: month_number incident_year 4 2011 5 2011 6 2011 7 2011 8 2011 9 2011 10 2011 11 2011 12 2011 1 2012 2 2

我在视图中有两列,它们为我提供了日期部分

它们是月数和年数

我需要一个新的列,它是一个日期/时间字段。它必须是其他两列提供的月份和年份的第一个

i、 e
42011
需要

2011-04-01 00:00:00.000
在新专栏中

当前设置如下所示:

month_number    incident_year
4   2011
5   2011
6   2011
7   2011
8   2011
9   2011
10  2011
11  2011
12  2011
1   2012
2   2012
3   2012
4   2012
5   2012
6   2012
您还可以通过使用0-date使其不那么冗长:

SELECT 
  incident_year, month_number,
  dt = DATEADD(MONTH, (incident_year-1900)*12+month_number-1, 0) 
  FROM dbo.view_name;
在SQL Server 2012中,您将能够执行更简单的操作:

SELECT DATEFROMPARTS(incident_year, month_number, 1)
  FROM dbo.view_name;
您还可以通过使用0-date使其不那么冗长:

SELECT 
  incident_year, month_number,
  dt = DATEADD(MONTH, (incident_year-1900)*12+month_number-1, 0) 
  FROM dbo.view_name;
在SQL Server 2012中,您将能够执行更简单的操作:

SELECT DATEFROMPARTS(incident_year, month_number, 1)
  FROM dbo.view_name;

是的,这是行不通的:
CAST(month\u number AS varchar)
将返回
'4'
,而不是
'04'
@X-Zero默认设置实际上不需要前导零(尽管我不确定所有语言或日期格式设置)。正如(现已删除)评论所说:@X-Zero我对此表示怀疑。即使添加4也会返回您04@AaronBertrand:我的错误更新了我的答案!是的,这是行不通的:
CAST(month\u number AS varchar)
将返回
'4'
,而不是
'04'
@X-Zero默认设置实际上不需要前导零(尽管我不确定所有语言或日期格式设置)。正如(现已删除)评论所说:@X-Zero我对此表示怀疑。即使添加4也会返回您04@AaronBertrand:我的错误更新了我的答案!您只需要将列作为查询的输出,对吗?或者您正在尝试向视图中添加一个新列?您只需要将该列作为查询的输出,对吗?或者您正在尝试向视图中添加新列?
SELECT DATEFROMPARTS(incident_year, month_number, 1)
  FROM dbo.view_name;