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

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

问题描述:

我在视图中有两列给我日期部分。SQL从年份和数字字段创建日期时间

它们是月份数和年份。

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

4, 2011需要被

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

你只需要在列作为查询的输出,对吗?或者你是否试图向视图中添加新列? – 2012-07-12 15:50:29

Select CAST(CAST(incident_year AS varchar(4)) + '-' + 
     CAST(month_number AS varchar(2)) + '-01' AS DATETIME) as incident_Year 
from YourView 
+0

是的,这是行不通的:'CAST(month_number AS varchar)'将返回''4',而不是''04'。 – 2012-07-12 15:44:31

+0

@ X-Zero默认设置并不需要前导零(尽管我不确定所有语言或日期格式设置)。也作为(现在删除)注释说:[停止声明varchar没有长度。请。](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx) – 2012-07-12 15:47:40

+0

@ X-Zero我怀疑。即使加4也会返回你04 – praveen 2012-07-12 15:49:05

Alter table yourTable add newDateColumn datetime NULL 

update yourTable set newDateColumn = 
    CONVERT(datetime, CAST(incident_year as varchar(4)) +'-' CAST(month_number as varchar(2))+'-01 00:00:00.000', varchar(30)) 
    from YourTable 

SELECT 
    incident_year, month_number, 
    dt = DATEADD(MONTH, (incident_year-1900)*12+month_number-1, '19000101') 
    FROM dbo.view_name; 

你也可以让它少一点冗长使用0日期:

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;