0

我在視圖中有兩列給我日期部分。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

回答

1
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

0
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 
3
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; 
相關問題