从SQL Server 2005中的date时间获取月份和年份

我需要从SQL Server的date时间的月+年,如“2008年1月”。 我按月份,年份分组查询。 我search并find像datepart,转换等function,但没有一个似乎对此有用。 我在这里错过了什么? 有这个function吗?

如果你的意思是你想要他们作为一个string,在这种格式;

SELECT CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) FROM customers 

以下是其他格式选项

 select datepart(month,getdate()) -- integer (1,2,3...) ,datepart(year,getdate()) -- integer ,datename(month,getdate()) -- string ('September',...) 

从SQL Server 2012开始,您可以使用:

 SELECT FORMAT(@date, 'yyyyMM') 

使用:

 select datepart(mm,getdate()) --to get month value select datename(mm,getdate()) --to get name of month 

有趣的是,我只是在SQL Server中编写相同的查询,然后是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 

它产生下面的输出(例子)。

 Month | Year | Total January | 2009 | 2 
 ( Month(Created) + ',' + Year(Created) ) AS Date 

这个怎么样?

 Select DateName( Month, getDate() ) + ' ' + DateName( Year, getDate() ) 

在SQL Server 2012中,可以使用下面的

selectFORMAT(getdate(),'MMM yyyy')

这给了确切的“2016年6月”

该格式不存在。 你需要做两件事情的结合,

 select convert(varchar(4),getdate(),100) + convert(varchar(4),year(getdate())) 

最好的办法是:

 dateadd(month,datediff(month,0,*your_date*),0) 

它会保持你的date时间types

我有同样的问题,四处寻找后,我发现这一点:

 SELECT DATENAME(yyyy, date) AS year FROM Income GROUP BY DATENAME(yyyy, date) 

这工作很好!

将date转换为本月的第一天,您可以通过单一属性进行分组依次sorting,而且在我的经验中速度更快。

 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) 
 ---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 
 cast(cast(sq.QuotaDate as date) as varchar(7)) 

给出“2006-04”格式

是的,你可以使用datename(month,intime)来获取文本中的月份。

现在的问题是关于SQL Server 2005,这里的许多答案都是针对以后版本的SQL Server。

 select convert (varchar(7), getdate(),20) --Typical output 2015-04 

SQL Server 2005没有在SQL Server 2008中引入的date函数

  ,datename(month,(od.SHIP_DATE)) as MONTH_ 

答:MONTH_一月一月九月十月十二月十月九月

返回全年的名称, – 全年,例如March-2017March-2017

 CONCAT(DATENAME(mm, GetDate()), '-', DATEPART(yy, GetDate())) 

这是伟大的工作。

 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 

以下作品完美! 我只是用它,试试看。

 date_format(date,'%Y-%c')