Preciso determinar o número de dias em um mês para uma determinada data no SQL Server.
Existe uma função integrada? Se não, o que devo usar como função definida pelo usuário?
sql
sql-server
datetime
date
user-defined-functions
Even Mien
fonte
fonte
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
componente daeomonth
saída.No SQL Server 2012, você pode usar EOMONTH (Transact-SQL) para obter o último dia do mês e, em seguida, pode usar DAY (Transact-SQL) para obter o número de dias no mês.
fonte
A solução mais elegante: funciona para qualquer @DATE
Jogue-o em uma função ou apenas use-o embutido. Isso responde à pergunta original sem todo o lixo extra nas outras respostas.
exemplos para datas de outras respostas:
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))
Retorna 31SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
Retorna 29SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
Retorna 31fonte
Muito mais simples ... tente
day(eomonth(@Date))
fonte
Porém, pessoalmente, eu faria um UDF para ele se não houver uma função integrada ...
fonte
Eu sugeriria:
fonte
Este código fornece a você o número de dias no mês atual:
Mude
getdate()
para a data pela qual você precisa contar dias.fonte
fonte
Solução 1: Encontre o número de dias em qualquer mês em que estamos
Solução 2: encontre o número de dias em uma determinada combinação mês-ano
fonte
Você precisa adicionar uma função, mas é simples. Eu uso isso:
fonte
fonte
Bom simples e não requer a criação de nenhuma função Funciona bem
fonte
Você precisa criar uma função, mas é para sua própria conveniência. Funciona perfeitamente e nunca encontrei nenhum cálculo defeituoso usando esta função.
Como funciona: subtraindo o número do dia da data da própria data, você obtém o último dia do mês anterior. Portanto, você precisa adicionar um mês à data fornecida, subtrair o número do dia e obter o componente de dia do resultado.
fonte
fonte
Eu votei a favor de Mehrdad, mas também funciona. :)
Testar
fonte
aqui está mais um...
fonte
Sei que essa pergunta é antiga, mas pensei em compartilhar o que estou usando.
e
Eles podem ser combinados para criar uma única função para recuperar o número de dias em um mês, se necessário.
fonte
Nice 'n' Simple e não requer a criação de nenhuma função
fonte
subdate
função.A resposta de Mehrdad Afshari é a mais precisa; além do usual, essa resposta é baseada na abordagem matemática formal dada por Curtis McEnroe em seu blog https://cmcenroe.me/2014/12/05/days-in-month-formula.html
fonte
Para obter o não. de dias em um mês, podemos usar diretamente Day () disponível no SQL.
Siga o link postado no final da minha resposta para o SQL Server 2005/2008.
O exemplo a seguir e o resultado são do SQL 2012
Resultado em SSMS do SQL Server
Processo:
Quando EOMONTH é usado, qualquer que seja o formato de data que usamos, ele é convertido para o formato DateTime do servidor SQL. Então, a saída de data de EOMONTH () será 2016-12-31 tendo 2016 como Ano, 12 como Mês e 31 como Dias. Essa saída, quando passada para Day (), fornece a contagem total de dias no mês.
Se quisermos obter o resultado instantâneo para verificação, podemos executar diretamente o código abaixo,
ou
para referência para trabalhar no SQL Server 2005/2008/2012, siga o seguinte link externo ...
Encontre o número de dias em um mês no SQL
fonte
resultado: este mês 31
Próximo mês 30
fonte
fonte
fonte
Para qualquer data
fonte
fonte
consulta simples no SQLServer2012:
selecione o dia (('20-05-1951 22:00:00'))
testei muitas datas e sempre retornou um resultado correto
fonte
selecione 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 + datediff (dd, dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())), dateadd (mm, 1, getdate ())))
substitua qualquer data por getdate para obter o número de meses nessa data específica
fonte
fonte