Konversi tanggal yyyy-mm-dd ke integer YYYYMM

17

Bagaimana saya bisa mengonversi @dateb:

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

yang mengembalikan 2014-04-04sebagai tanggal ke bilangan bulat dari201404

Terima kasih

Maria Sinding-Olsen
sumber

Jawaban:

19

Pada versi 2012 atau lebih tinggi, Anda dapat menggunakan formatfungsi ini untuk mendapatkan tahun dan bulan, lalu gunakan sebagai int.

Pada versi sebelum 2012 Anda dapat melakukan pemformatan dengan convertfungsi tersebut, lalu dilemparkan sebagai 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
sumber
6
Saya akan menghindari FORMAT(), umumnya . YMMV.
Aaron Bertrand
13

Mungkin sedikit lebih rapi:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Aaron Bertrand
sumber
1
Saya setuju dengan ini dengan sepenuh hati. Anda memiliki tanggal, yang memiliki subbidang bilangan bulat; Anda menginginkan bilangan bulat. Kenapa ada pemrosesan string?
Ross Presser
-1

Bisakah ini melakukan trik untuk Anda?

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

Ah maaf, saya lupa, Anda akan membutuhkan substring juga. Jadi begitu:

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

Metode lain:

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

Memberi: 20160229

ringo
sumber