Перетворіть дату гггг-мм-дд у ціле число РРРРМ


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


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)


-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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.