Konwertuj datę rrrr-mm-dd na liczbę całkowitą RRRRMM

17

Jak mogę przekonwertować @dateb:

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

, która zwraca 2014-04-04jako datę do liczby całkowitej201404

Dzięki

Maria Sinding-Olsen
źródło

Odpowiedzi:

19

W wersji 2012 lub nowszej możesz użyć formatfunkcji, aby uzyskać tylko rok i miesiąc, a następnie przesłać jako int.

W wersjach wcześniejszych niż 2012 można formatować za pomocą convertfunkcji, a następnie rzutować jako 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
źródło
6
FORMAT()Ogólnie bym unikał . YMMV.
Aaron Bertrand
13

Być może trochę ładniej:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Aaron Bertrand
źródło
1
Zgadzam się z tym całym sercem. Masz datę, która ma pola całkowite; chcesz liczbę całkowitą. Dlaczego, u licha, przetwarzane są ciągi znaków?
Ross Presser,
-1

Czy to może załatwić sprawę?

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

Ach, przepraszam, zapomniałem, będziesz też potrzebował substratu. Więc jest to:

select cast(substring(convert(varchar, dateadd(month, datediff(month, 0, getdate()) - 3, 0), 112), 0, 7) as int)
Piotr
źródło
-1

Inna metoda:

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

Daje: 20160229

ringo
źródło