Konvertieren Sie das Datum JJJJ-MM-TT in die Ganzzahl JJJJMM

17

Wie kann ich @dateb konvertieren:

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

das gibt 2014-04-04als Datum eine ganze Zahl von zurück201404

Vielen Dank

Maria Sinding-Olsen
quelle

Antworten:

19

Ab Version 2012 können Sie die formatFunktion verwenden, um nur Jahr und Monat abzurufen und sie dann als int umzuwandeln.

In Versionen vor 2012 können Sie die Formatierung mit der convertFunktion vornehmen und dann als int umwandeln.

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
quelle
13

Vielleicht etwas aufgeräumter:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Aaron Bertrand
quelle
1
Dem stimme ich voll und ganz zu. Sie haben ein Datum mit ganzzahligen Unterfeldern. Sie wollen eine ganze Zahl. Warum um alles in der Welt?
Ross Presser
-1

Könnte dies den Trick für Sie tun?

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

Entschuldigung, ich habe vergessen, du brauchst auch einen Teilstring. So ist es:

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

Eine andere Methode:

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

Gibt: 20160229

ringo
quelle