Как я могу конвертировать @dateb:
SET @dateb = dateadd(month, datediff(month, 0, getdate()) - 3, 0)
который возвращает в 2014-04-04
качестве даты целое число201404
Благодарность
Как я могу конвертировать @dateb:
SET @dateb = dateadd(month, datediff(month, 0, getdate()) - 3, 0)
который возвращает в 2014-04-04
качестве даты целое число201404
Благодарность
Ответы:
В версии 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
Возможно, немного аккуратнее:
SELECT YEAR(@dateb)*100 + MONTH(@dateb);
Может ли это сделать трюк для вас?
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)
Другой метод:
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
FORMAT()
вообще избежал . YMMV.