2016-06-27 3 views
-2

Мне нужно получить последний день месяца с вводом месяца и года. Например, с вводом 06/2016 он вернется 30. Я использую SQL Server 2005. Спасибо за любую помощь.Функция получить последний день месяца в sql

+0

задал bazillion раз уже миллиард способов. Пожалуйста, попробуйте выполнить поиск!~ –

+4

Возможный дубликат [Получить последний день месяца в SQL] (http://stackoverflow.com/questions/1051488/get-the-last-day-of-the-month-in-sql) –

ответ

0

Предположим, что ваш вход в виде VARCHARMM/YYYY.

Используйте RIGHT и LEFT, чтобы получить год и месяц соответственно. Затем используйте DATEFROMPARTS для генерации даты начала. Затем используйте EOMONTH, чтобы получить последний день месяца. Наконец, воспользуйтесь DAY, чтобы извлечь часть дня.

DECLARE @input VARCHAR(7) = '06/2016' 

SELECT 
    DAY(
     EOMONTH(
      DATEFROMPARTS(CAST(RIGHT(@input,4) AS INT),CAST(LEFT(@input, 2) AS INT),1) 
     ) 
    ) 

Вышеупомянутое работает только для SQL Server 2012+.


Для SQL Server 2005, вы можете использовать DATEADD для создания даты:

SELECT 
    DAY(-- Day part 
     DATEADD(DAY, -1, -- Last day of the month 
      DATEADD(MONTH, CAST(LEFT(@input, 2) AS INT), -- Start of next month 
       DATEADD(YEAR, CAST(RIGHT(@input, 4) AS INT) - 1900, 0) -- Start of the year 
      ) 
     ) 
    ) 

Ссылка:

+0

Но я используйте Sql server 2005, поэтому нет eomonth. – Hanaka

+0

@Hanaka См. Мой обновленный ответ. –

+1

Спасибо @ Феликс Памиттан. Он работает, и ссылка очень полезна. – Hanaka

0

Вы бы сделать что-то вроде этого:

select eomonth(getdate(), 0); 

Если вы хотите в формате MM/YYYY, то вы могли бы сделать это:

select format(eomonth(getdate(), 0), 'MM/yyyy'); 
0

пардон за бросание в ответ, который не является специфичные для «SQL Server», ни оттуда «2005», но обобщенного способа вычислить ответ, который Вы ищете заключается в следующем:

  1. ломается вход, который у вас есть, например, 06/2016, на две части. Вызвать их @MONTH и @YEAR. Определите третье значение, @DAY, равное .
  2. Typecast это значение даты ... «1 июня 2016 года».
  3. Теперь, используя функции обработки даты, которые у вас есть , обязательно, чтобы «сначала добавить один месяц, а затем вычесть один день».

Одна вещь, которую вы должны быть очень осторожны при разработке кода, как это, чтобы быть уверенным (!), Что ваш код для декодирования 06/2016 работы для каждый (!) значение, которое на самом деле происходит в этой базе данных, или, что на него можно положиться сбой.

Смежные вопросы