Convertir fecha aaaa-mm-dd a entero AAAAMM


17

¿Cómo puedo convertir @dateb:

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

que vuelve 2014-04-04como fecha a un entero de201404

Gracias

Respuestas:


19

En la versión 2012 o superior, puede usar la formatfunción para obtener solo año y mes, luego emitirlo como int.

En versiones anteriores a 2012, puede formatear con la convertfunción y luego emitir 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


13

Quizás un poco más ordenado:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);

1
Estoy de acuerdo con esto de todo corazón. Tiene una fecha, que tiene subcampos enteros; quieres un entero ¿Por qué demonios se procesan cadenas?
Ross Presser

-1

¿Podría esto hacer el truco para ti?

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

Ah, lo siento, lo olvidé, necesitarás una subcadena también. Entonces es:

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


-1

Otro 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);

Da: 20160229

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.