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 值。

参考文档: 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

结果如下:

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'

运行结果:

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

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

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

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

SqlServer 笔记一 某表中每个月的产品数量(DATENAME() 与 DATEPART()、YEAR())的更多相关文章

  1. 【Sqlserver】修改数据库表中的数据:对缺失的数据根据已有的数据进行修补

    1 --查询时间范围内的数据 select * from dbo.point where wtime >'2014-05-01 23:59:59' and wtime< '2014-05- ...

  2. SQL笔记----在一个关系表中操作列

    使用alter关键字,可以为一个表添加新的列. 比如: 给Persons的表中添加一列,名字为Birthday,类型是date. ALTER TABLE Persons ADD Birthday da ...

  3. mssql sqlserver 禁止删除数据表中指定行数据(转自:http://www.maomao365.com/?p=5323)

    转自:http://www.maomao365.com/?p=5323 摘要:下文主要讲述,如何禁止删除数据表中指定行数据 最近收到用户一个需求,禁止所有人删除”表A”中,ID 为1.2.3.4.5的 ...

  4. MySQL/MariaDB学习笔记——mysql.user表中存在多个root用户问题理解

    mysql.user表中存在多个root用户问题 问题描述:使用 SELECT host,user FROM mysql.user 发现mysql.user表中存在三个root用户,如下 持着对中几个 ...

  5. C#读取Visual FoxPro(*.dbf)数据并使用SqlBulkCopy插入到SqlServer 2008 R2数据表中

    公司数据库从32位的SqlServer 2005升级到64位的SqlServer 2008 R2后,无法再像原来通过Link Server连接VFP同步数据,因此考虑用代码程序从VFP数据库中读取所需 ...

  6. 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  7. SQLServer 命令批量删除数据库中指定表(游标循环删除)

    DECLARE @tablename VARCHAR(30),@sql VARCHAR(500)DECLARE cur_delete_table CURSOR READ_ONLY FORWARD_ON ...

  8. (转)分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)

    分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...

  9. 用SqlBulkCopy批量插入数据到SqlServer数据库表中

    首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...

随机推荐

  1. python 环境配置

    每个项目都应该有自己的虚拟环境,如何方便的操作呢? 1. 安装 virtualenv 2. 安装 virtualenvwrapper 3. 创建目录用来存放虚拟环境 mkdir $HOME/.virt ...

  2. 使用SQL语句对数据进行MD5加密

    如果数据库表User中有一列为passwd,存放的是md5加密的数据,如何更新新的数据. update user set passwd=md5("123321") where uN ...

  3. Excel 点滴积累

    1.Excel中截取邮件@之后的字符 MID(text, start_num, num_chars) FIND(find_text,within_text,start_num) Right(strin ...

  4. 提额 APP

    提额 APP 开始参与这个APP也是巧合,一个月之前,我还在忙于电信运营商的工作,上级就过来问我在之前公司有没有用过 html css js这些.在维库的时候,可是从前台到后台都是要全包的呀,因为项目 ...

  5. MyEclipse2015配置Tomcat方法----》myeclipse2015

    1.打开Myeclipse2015,进入偏好设置window-perference,找到下图箭头指向的地方 2.点击Add按钮进入下面界面 3.点击next进入下面界面 4.选择tomat  选择JR ...

  6. 微信分享ios设备没有分享图标安卓有分享图标 (分享功能没有问题)

    解决方案:去除 var sharedata = { title: $("#shareTitle").val(), desc: $("#shareContent" ...

  7. 大公司的PHP面试题

    1. 禁用COOKIE 后 SEESION 还能用吗? 2. 抓取远程图片到本地,你会用什么函数? 4. 你觉得在pV10W的时候, 同等配置下,LUNIX 比WIN快多少? 5. 简述pOST 和G ...

  8. android init进程分析 ueventd

    转自:http://blog.csdn.net/freshui/article/details/2132299 (懒人最近想起我还有csdn好久没打理了,这个Android init躺在我的草稿箱中快 ...

  9. LeetCode: Largest Rectangle in Histogram(直方图最大面积)

    http://blog.csdn.net/abcbc/article/details/8943485 具体的题目描述为: Given n non-negative integers represent ...

  10. HDU 1907 John nim博弈变形

    John Problem Description   Little John is playing very funny game with his younger brother. There is ...