2010-02-11 1268 views
1

如何从字符串日期时间获得年份(2009)和月份(12),以下给出正确的完整日期但错误的年份(1905-07-03 00:00: 00.000)和月份(1900-01-13 00:00:00.000)。我曾尝试将YYYY更改为年份和月份。将字符串转换为日期时间为年份和月份SQL

Declare @date dateTime; 
Declare @CurrentYear datetime; 
Declare @CurrentMonth datetime; 
Select @date = CONVERT (datetime , '20091231' ,112); 
Select @CurrentYear = DATEPART(YYYY,@date); 
--Select @CurrentYear = YEAR(@Date); <---- still wrong year 
Select @CurrentMONTH = DATEPART(MM,@date); 
--Select @CurrentMonth = MONTH(@date); <---- still wrong year 
select @date as fulldate, @CurrentYear as [year], @CurrentMonth as [Month]; 

到目前为止,没有任何SO建议工作。

问候 ķ

回答

1

如果你想使用DATEPART,使用您的年份和月份部分YEAR (YY or YYYY)MONTH (M or MM)

DECLARE @date DATETIME 
SET @date = CAST('20091231' as DATETIME) -- ISO-8601 format always works 

SELECT 
    DATEPART(YEAR, @date), -- gives 2009 
    DATEPART(YYYY, @date), -- gives 2009 
    DATEPART(MONTH, @date), -- gives 12 
    DATEPART(MM, @date)  -- gives 12 

是否帮助可言?

+0

谢谢,改变了使用ISO 8601的代码。 – TheOCD 2010-02-11 18:32:52

1

工作的呢?

declare @d datetime 
select @d = '20091231' 

select YEAR(@d),MONTH(@d), year(getdate()) as CurrentYear 
+0

0123类似的..分配给@CurrentYear和@CurrentMonth导致日期出错,当我“选择DATEPART(YYYY,@ date)作为[year],DATEPART(MM,@ date)作为[Month] “它工作 – TheOCD 2010-02-11 18:32:28

相关问题