Convertir la date aaaa-mm-jj en entier YYYYMM

17

Comment puis-je convertir @dateb:

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

qui renvoie 2014-04-04comme date un entier de201404

Merci

Maria Sinding-Olsen
la source

Réponses:

19

Sur la version 2012 ou supérieure, vous pouvez utiliser la formatfonction pour obtenir uniquement l'année et le mois, puis la convertir en entier.

Sur les versions antérieures à 2012, vous pouvez effectuer le formatage avec la convertfonction, puis convertir en 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
la source
6
J'éviterais FORMAT(), en général . YMMV.
Aaron Bertrand
13

Peut-être un peu plus ordonné:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Aaron Bertrand
la source
1
Je suis entièrement d'accord avec cela. Vous avez une date, qui a des sous-champs entiers; vous voulez un entier. Pourquoi diable faire du traitement de chaîne?
Ross Presser
-1

Cela pourrait-il faire l'affaire pour vous?

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

Ah désolé, j'ai oublié, vous aurez aussi besoin d'une sous-chaîne. Alors c'est:

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

Une autre méthode:

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

Donne: 20160229

ringo
la source