从datetime获取年份和月份(以int为单位)

时间:2011-09-20 11:00:41

标签: sql-server-2005 tsql date-format

我创建了一个视图,需要将日期时间转换为以下格式:

2011 06   (year, empty-space, two digit numeric month)

格式化它的最佳方法是什么?

这是日期时间(在视图的子查询中,“舍入”到月份):

DATEADD(month, DATEDIFF(month, 0,Claim_Submitted_Date), 0) AS Year_Month_Submit

这给了我年,月日(当然01因为日期时间四舍五入到第一天):

CONVERT(varchar,Year_Month_Submit,112)as Year_Month_Submit

提前谢谢

3 个答案:

答案 0 :(得分:2)

select stuff(convert(varchar(6), Claim_Submitted_Date, 112), 5,0,' ')

Tim Schmelter的回答:

你可以比较这样的方法:

declare @i int = 0
declare @dummy varchar(20)
while @i < 1000000
begin
--set @dummy = stuff(convert(varchar(6), getdate() + @i / 1000, 112), 5,0,' ') 
set @dummy = REPLACE(CONVERT(VARCHAR(7), getdate() + @i / 1000, 121), '-', ' ') 
set @i = @i + 1
end

在我的服务器上,我的版本需要1秒钟而另一个版本需要3秒

答案 1 :(得分:1)

试试这个:

SELECT LTRIM(STR(YEAR(Claim_Submitted_Date))) + ' ' +
       RIGHT('0'+ LTRIM(STR(MONTH(Claim_Submitted_Date))), 2)
FROM MyTable

答案 2 :(得分:1)

怎么样

STUFF(STUFF('YYYY 0M', 1, 4, YEAR(Claim_Submitted_Date)), 8 - LEN(MONTH(Claim_Submitted_Date)), 2, MONTH(Claim_Submitted_Date))

或者

REPLACE(CONVERT(VARCHAR(7), @Claim_Submitted_Date, 121), '-', ' ')