Converter data aaaa-mm-dd em número inteiro AAAAMM

17

Como posso converter @dateb:

SET @dateb = dateadd(month, datediff(month, 0, getdate()) - 3, 0)

que retorna 2014-04-04como data para um número inteiro de201404

obrigado

Maria Sinding-Olsen
fonte

Respostas:

19

Na versão 2012 ou superior, você pode usar a formatfunção para obter apenas ano e mês e depois convertê-la como int.

Nas versões anteriores a 2012, você pode fazer a formatação com a convertfunção e converter como int.

declare @dateb datetime
set @dateb = getdate()

select cast(format(@dateb,'yyyyMM') as int) --2012 or higher
select cast(convert(varchar(6),@dateb,112) as int) -- all versions
Bob Klimes
fonte
6
Eu evitaria FORMAT(), geralmente . YMMV.
Aaron Bertrand
13

Talvez um pouco mais arrumado:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Aaron Bertrand
fonte
1
Eu concordo com isso de todo o coração. Você tem uma data, que possui subcampos inteiros; você quer um número inteiro. Por que diabos algum processamento de cordas?
Ross Presser
-1

Isso poderia fazer o truque para você?

set @dateb = cast(convert(varchar, dateadd(month, datediff(month, 0, getdate()) - 3, 0), 112) as int)

Desculpe, esqueci, você também precisará de uma substring. Então é:

select cast(substring(convert(varchar, dateadd(month, datediff(month, 0, getdate()) - 3, 0), 112), 0, 7) as int)
Pedro
fonte
-1

Outro método:

DECLARE @PeriodToCalculate_DATE [DATE] ='2016-02-29'

SELECT 
   CAST(DATEPART(YYYY,@PeriodToCalculate_DATE) AS [CHAR](4))
       + RIGHT('0' + CAST(DATEPART(M,@PeriodToCalculate_DATE) AS [VARCHAR](2)),2)  
       + RIGHT('0' + CAST(DATEPART(D,@PeriodToCalculate_DATE) AS [VARCHAR](2)),2);

Dá: 20160229

ringo
fonte