Мне нужно определить количество дней в месяце для заданной даты в SQL Server.
Есть встроенная функция? Если нет, то что мне следует использовать в качестве пользовательской функции?
sql
sql-server
datetime
date
user-defined-functions
Даже миен
источник
источник
case when datediff(m, dateadd(day, 1-day(@date), @date), convert(date, convert(datetime, 2958463))) > 0 then datediff(day, dateadd(day, 1-day(@date), @date), dateadd(month, 1, dateadd(day, 1-day(@date), @date))) else 31 end
day
компонентeomonth
вывода.В SQL Server 2012 вы можете использовать EOMONTH (Transact-SQL), чтобы получить последний день месяца, а затем вы можете использовать DAY (Transact-SQL), чтобы получить количество дней в месяце.
источник
Самое элегантное решение: работает для любого @DATE
Добавьте его в функцию или просто используйте в строке. Это отвечает на исходный вопрос без лишнего мусора в других ответах.
примеры дат из других ответов:
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))
Возвращает 31SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
Возвращает 29SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
Возвращает 31источник
Гораздо проще ... попробуйте
day(eomonth(@Date))
источник
Лично я бы сделал для него UDF, если нет встроенной функции ...
источник
Я бы посоветовал:
источник
Этот код дает вам количество дней в текущем месяце:
Измените
getdate()
дату, для которой нужно считать дни.источник
источник
Решение 1. Найдите количество дней в том месяце, в котором мы сейчас находимся
Решение 2. Найдите количество дней в заданной комбинации месяц-год
источник
Вам нужно добавить функцию, но она простая. Я использую это:
источник
источник
Приятно Простой и не требует создания каких-либо функций Работает нормально
источник
Вам нужно создать функцию, но это для вашего удобства. Она отлично работает, и я никогда не сталкивался с ошибочными вычислениями с использованием этой функции.
Как это работает: вычитание номера дня даты из самой даты дает последний день предыдущего месяца. Итак, вам нужно добавить один месяц к заданной дате, вычесть номер дня и получить дневную составляющую результата.
источник
источник
Я поддержал Мехрдада, но это тоже работает. :)
Тестировать
источник
вот еще один ...
источник
Я знаю, что это старый вопрос, но я подумал, что поделюсь тем, что использую.
и
Их можно объединить, чтобы создать единую функцию для получения количества дней в месяце, если это необходимо.
источник
Красиво 'n' Простой и не требует создания каких-либо функций
источник
subdate
функции.Ответ Мехрдада Афшари является наиболее точным, кроме обычного, этот ответ основан на формальном математическом подходе, представленном Кертисом Макинроем в его блоге https://cmcenroe.me/2014/12/05/days-in-month-formula.html
источник
Чтобы получить нет. дней в месяце мы можем напрямую использовать Day (), доступный в SQL.
Перейдите по ссылке, опубликованной в конце моего ответа для SQL Server 2005/2008.
Следующий пример и результат взяты из SQL 2012
Результат в SQL Server SSMS
Обработать:
Когда используется EOMONTH, какой бы формат даты мы ни использовали, он конвертируется в формат DateTime SQL-сервера. Тогда вывод даты EOMONTH () будет 2016-12-31 с 2016 как Год, 12 как Месяц и 31 как Дни. Этот вывод при передаче в Day () дает вам общее количество дней в месяце.
Если мы хотим получить мгновенный результат для проверки, мы можем напрямую запустить приведенный ниже код,
или
для справки о работе в SQL Server 2005/2008/2012 перейдите по следующей внешней ссылке ...
Найдите количество дней в месяце в SQL
источник
результат: 31 месяц
В следующем месяце 30
источник
источник
источник
На любую дату
источник
источник
простой запрос в SQLServer2012:
выберите день (('20-05-1951 22:00:00'))
Я тестировал много дат, и он всегда возвращает правильный результат
источник
выберите first_day = dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), last_day = dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())) , dateadd (mm, 1, getdate ())), no_of_days = 1 + dateadd (dd, dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())), dateadd (mm, 1, getdate ())))
замените любую дату на getdate, чтобы получить количество месяцев в этой конкретной дате
источник
источник