Это кажется довольно простым, но я не могу понять это.Возврат числа месяцев и лет от int?
Если у меня есть несколько месяцев, например 61
Это 5 лет и 1 месяц. Как я могу написать выбор, чтобы дать мне значение 0105
?
Это кажется довольно простым, но я не могу понять это.Возврат числа месяцев и лет от int?
Если у меня есть несколько месяцев, например 61
Это 5 лет и 1 месяц. Как я могу написать выбор, чтобы дать мне значение 0105
?
вам нужны некоторые case
, cast
, /12
и %12
:
declare @value int
set @value=61
select
case when len(cast(@value%12 as int))=1 then '0'+cast(@value%12 as varchar(1)) else cast(cast(@value%12 as int)as varchar(2)) end+
case when len(cast(@value/12 as int))=1 then '0'+cast(@value/12 as varchar(1)) else cast(cast(@value/12 as int)as varchar(2)) end
выход:0105
Предположительно вы будете иметь запрос следующим образом:
SELECT MONTHS
FROM MY_TABLE;
Вы можете сделать некоторое разделение и получить количество да rs:
SELECT MONTHS/12 AS YEARS
FROM MY_TABLE;
Затем вам нужно получить оставшееся от этого количество месяцев. Modulo математические операции используются для этого:
SELECT MONTHS % 12 AS MONTHS,
MONTHS/12 AS YEARS
FROM MY_TABLE;
SELECT FORMAT(MONTHS % 12 AS MONTHS, '00'),
FORMAT(MONTHS/12 AS YEARS, '00')
FROM MY_TABLE;
Наконец, Concat двух результатов вместе:
SELECT CONCAT(FORMAT(MONTHS % 12 AS MONTHS, '00'),
FORMAT(MONTHS/12 AS YEARS, '00')) AS RESULT
FROM MY_TABLE;
'' FORMAT 'не является признанным встроенным именем функции. 'Для версий' ниже 2014' – jfun
[FORMAT] (https://msdn.microsoft.com/en-us/library/hh213505%28v=sql. 110% 29.aspx) поддерживается в SQL Server ** 2012 ** и выше. – Filburt
Ваша версия сделала вывод ** 0501 ** вместо нужного ** 0105 **, поэтому я взял на себя смелость исправить это. – Filburt
Здесь у вас есть два возможные решения:
DECLARE @n INT = 61
SELECT RIGHT(REPLACE(CONVERT(varchar(8),DATEADD(Month,@n,'2000-01-01'),1),'/',''),4)
SELECT RIGHT(CAST([email protected]%12*[email protected]/12 AS VARCHAR(5)),4)
два выбора будут давать разные результаты, т. Е. Для ..., 99,100, ... – jfun
WOW! Отличные ответы! Спасибо всем за вход! – user3641694