1、使用 DATENAME() 函数
SELECT DATENAME(yyyy, [columnName]) + '/' + DATENAME(mm, [columnName]) AS monthDate,COUNT(*) AS number FROM [tableName]
GROUP BY DATENAME(yyyy, [columnName]) ,DATENAME(mm, [columnName])ORDER BY monthDate DESC
结果如下:
DATENAME ( datepart , date ) 返回值是一个 nvarchar 值。
参考文档:
2、使用 year() month() 函数:
SELECT cast(year([columnName]) as varchar(8))+'/'+cast(month([columnName]) as varchar(8)) AS monthDate,COUNT(*) AS number FROM [tableName]
GROUP BY year([columnName]),month([columnName])ORDER BY convert(datetime,cast(year([columnName]) as varchar(8))+' - '+cast(month([columnName]) as varchar(8)) + '-01') DESC结果如下:
YEAR ( date ) 返回的是一个 INT 值 其与 DATEPART ( year , date ) 返回的值一样。
MONTH ( date ) 返回的是一个 INT 值 其与 DATEPART ( month , date ) 返回的值一样。
参考文档:
总结:
1、在目前的数据库中使用第一种方式更为简便。但是需要注意的是在不同数据库中第一种方式使用的 DATENAME ( datepart , date ) 函数返回的值是有区别的:
以月份为例 DATENAME ( month , ‘2016/1/8’ ) 在有的数据库中返回的是 ‘01’,但是有的数据库中返回的值就是 ‘January’ 这个是与数据库的设置有关的,可以用以下语句查询: SELECT @@Language 我的数据库返回的是 ‘简体中文’。
示例:
SET LANGUAGE 'Italian'SELECT DATENAME(month, '2016-01-08') AS 'Month Name'SET LANGUAGE 'English'SELECT DATENAME(month, '2016-01-08') AS 'Month Name'SET LANGUAGE 'Simplified Chinese'SELECT DATENAME(month, '2016-01-08') AS 'Month Name'
运行结果:
所以如果不知道数据库是何种语言,使用第二种方法是通用的选择。
2、DATENAME() 函数与 DATEPART() 函数在大部分的时候返回的值也是一样的,但还是有所区别:
以月份那个为例,即使返回数字,DATENAME() 返回的依然是 ‘01’,而 DATEPART() 返回的是 ‘1’
以周几(weekDay)为例,SELECT DATENAME(WEEKDAY,'2016-01-08'),DATEPART(WEEKDAY,'2016-01-08') 返回的是 ‘星期五’,‘6’