SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR())

 

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

 

结果如下:

SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR())_第1张图片

 

DATENAME ( datepart , date ) 返回值是一个 nvarchar 值。

参考文档: DATANAME的使用

 

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

结果如下:

SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR())_第2张图片

YEAR ( date ) 返回的是一个 INT 值 其与 DATEPART ( year , date ) 返回的值一样。

MONTH ( date ) 返回的是一个 INT 值 其与 DATEPART ( month , date ) 返回的值一样。

参考文档:DATEPART的使用      YEAR的使用

 

 

总结:

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'

运行结果:

SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR())_第3张图片

所以如果不知道数据库是何种语言,使用第二种方法是通用的选择。

 

2、DATENAME() 函数与 DATEPART() 函数在大部分的时候返回的值也是一样的,但还是有所区别:

以月份那个为例,即使返回数字,DATENAME() 返回的依然是 ‘01’,而 DATEPART() 返回的是 ‘1’

以周几(weekDay)为例,SELECT DATENAME(WEEKDAY,'2016-01-08'),DATEPART(WEEKDAY,'2016-01-08') 返回的是 ‘星期五’,‘6’

 

 

 

 

你可能感兴趣的:(SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR()))