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
Select CAST(CAST(incident_year AS varchar(4)) + '-' +
CAST(month_number AS varchar(2)) + '-01' AS DATETIME) as incident_Year
from YourView
是的,这是行不通的:'CAST(month_number AS varchar)'将返回''4',而不是''04'。 – 2012-07-12 15:44:31
@ 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
@ 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;
你只需要在列作为查询的输出,对吗?或者你是否试图向视图中添加新列? – 2012-07-12 15:50:29