Конвертировать дату гггг-мм-дд в целое число ГГГГММ

17

Как я могу конвертировать @dateb:

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

который возвращает в 2014-04-04качестве даты целое число201404

Благодарность

Мария Синдинг-Олсен
источник

Ответы:

19

В версии 2012 или выше вы можете использовать formatфункцию, чтобы получить только год и месяц, а затем привести ее к типу int.

В версиях до 2012 года вы можете выполнить форматирование с помощью convertфункции, а затем привести к типу 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
Боб Климс
источник
6
Я бы FORMAT()вообще избежал . YMMV.
Аарон Бертран
13

Возможно, немного аккуратнее:

SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Аарон Бертран
источник
1
Я согласен с этим от всего сердца. У вас есть дата, которая имеет целочисленные подполя; Вы хотите целое число. С какой стати какая-то обработка строк?
Росс Прессер
-1

Может ли это сделать трюк для вас?

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

Ах, прости, я забыл, тебе тоже понадобится подстрока. Так что это:

select cast(substring(convert(varchar, dateadd(month, datediff(month, 0, getdate()) - 3, 0), 112), 0, 7) as int)
Питер
источник
2
Пожалуйста , не используйте varchar без указания длины .
Аарон Бертран
-1

Другой метод:

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

Дает: 20160229

Ринго
источник