Получить год и месяц (как int) от datetime - PullRequest
1 голос
/ 20 сентября 2011

Я создал представление и мне нужно преобразовать дату и время в следующий формат:

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 ]

2 голосов
/ 20 сентября 2011
select stuff(convert(varchar(6), Claim_Submitted_Date, 112), 5,0,' ')

Ответ Тиму Шмельтеру:

Вы можете сравнить методы следующим образом:

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 голос
/ 20 сентября 2011

Как насчет

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), '-', ' ')
1 голос
/ 20 сентября 2011

Попробуйте это:

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