Preciso do mês + ano a partir da data e hora no SQL Server, como 'janeiro de 2008'. Estou agrupando a consulta por mês, ano. Eu pesquisei e encontrei funções como datepart, convert, etc., mas nenhuma delas parece útil para isso. Estou faltando alguma coisa aqui? Existe uma função para isso?
sql
sql-server
Malik Daud Ahmad Khokhar
fonte
fonte
Respostas:
Se você quer dizer que os quer de volta como uma string, nesse formato;
SELECT CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) FROM customers
Aqui estão as outras opções de formato
fonte
select datepart(month,getdate()) -- integer (1,2,3...) ,datepart(year,getdate()) -- integer ,datename(month,getdate()) -- string ('September',...)
fonte
datepart(month,getdate())
edatepart(year,getdate())
. O que são mês e ano ?A partir do SQL Server 2012, você pode usar:
SELECT FORMAT(@date, 'yyyyMM')
fonte
Usar:
select datepart(mm,getdate()) --to get month value select datename(mm,getdate()) --to get name of month
fonte
Engraçado, eu estava brincando de escrever essa mesma consulta no SQL Server e depois no LINQ.
SELECT DATENAME(mm, article.Created) AS Month, DATENAME(yyyy, article.Created) AS Year, COUNT(*) AS Total FROM Articles AS article GROUP BY DATENAME(mm, article.Created), DATENAME(yyyy, article.Created) ORDER BY Month, Year DESC
Ele produz a seguinte saída (exemplo).
fonte
No SQL server 2012, abaixo pode ser usado
selecione FORMAT (getdate (), 'MMM aaaa')
Isso dá exatamente "junho de 2016"
fonte
Que tal agora?
Select DateName( Month, getDate() ) + ' ' + DateName( Year, getDate() )
fonte
fonte
Esse formato não existe. Você precisa fazer uma combinação de duas coisas,
select convert(varchar(4),getdate(),100) + convert(varchar(4),year(getdate()))
fonte
a melhor maneira de fazer isso é com:
vai manter o seu tipo de data e hora
fonte
retorna o nome completo do mês, -, ano completo, por exemplo
March-2017
fonte
Tive o mesmo problema e depois de dar uma olhada descobri o seguinte:
SELECT DATENAME(yyyy, date) AS year FROM Income GROUP BY DATENAME(yyyy, date)
Está funcionando muito bem!
fonte
Converter a data para o primeiro dia do mês permite agrupar por e ordenar por um único atributo, e é mais rápido na minha experiência.
declare @mytable table(mydate datetime) declare @date datetime set @date = '19000101' while @date < getdate() begin insert into @mytable values(@date) set @date = dateadd(day,1,@date) end select count(*) total_records from @mytable select dateadd(month,datediff(month,0,mydate),0) first_of_the_month, count(*) cnt from @mytable group by dateadd(month,datediff(month,0,mydate),0)
fonte
---Lalmuni Demos--- create table Users ( userid int,date_of_birth date ) ---insert values--- insert into Users values(4,'9/10/1991') select DATEDIFF(year,date_of_birth, getdate()) - (CASE WHEN (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()),date_of_birth)) > getdate() THEN 1 ELSE 0 END) as Years, MONTH(getdate() - (DATEADD(year, DATEDIFF(year, date_of_birth, getdate()), date_of_birth))) - 1 as Months, DAY(getdate() - (DATEADD(year, DATEDIFF(year,date_of_birth, getdate()), date_of_birth))) - 1 as Days, from users
fonte
dá o formato "2006-04"
fonte
A pergunta é sobre o SQL Server 2005, muitas das respostas aqui são para versões posteriores do SQL Server.
select convert (varchar(7), getdate(),20) --Typical output 2015-04
SQL Server 2005 não tem função de data que foi introduzida no SQL Server 2008
fonte
Sim, você pode usar
datename(month,intime)
para obter o mês em texto.fonte
Resposta: MONTH_ janeiro janeiro setembro outubro dezembro outubro setembro
fonte
É um ótimo trabalho.
DECLARE @pYear VARCHAR(4) DECLARE @pMonth VARCHAR(2) DECLARE @pDay VARCHAR(2) SET @pYear = RIGHT(CONVERT(CHAR(10), GETDATE(), 101), 4) SET @pMonth = LEFT(CONVERT(CHAR(10), GETDATE(), 101), 2) SET @pDay = SUBSTRING(CONVERT(CHAR(10), GETDATE(), 101), 4,2) SELECT @pYear,@pMonth,@pDay
fonte
O seguinte funciona perfeitamente! Eu apenas usei, experimente.
fonte