使用GROUP BY和日期

时间:2016-07-03 12:05:34

标签: sql sql-server

我的表格中有一个发票日期列,其中包含以下数据

20150131
20150231
20160128
20161231

我想根据交易年份对数据进行分组......即2015年或2016年。我的列类型为nvarchar

有人可以帮忙。我正在使用SQL Server 2012。

3 个答案:

答案 0 :(得分:1)

假设列是整数,因为SQL Server中的整数除法会截断结果,所以您需要做的就是将低四位数除以:

SELECT
    datefield/10000 AS Year
,   SUM(...) AS ...
FROM MyTable
WHERE ...
GROUP BY datefield/10000

如果您的列是char或varchar,请改用LEFT(datefield,4)

注意:我假设您不拥有该表,因此切换到更合适的类型(即date)不是一种选择。否则,我强烈建议切换,因为date较小,并且它还允许您访问特定于日期的功能,例如提取日期,月份和年份。

答案 1 :(得分:1)

如果您的日期有效,那么您只需使用它:

SELECT ... FROM ... GROUP BY YEAR(CAST(myDate AS DATETIME))

但如果您的日期无效(现在因为二月有28天),您可以试试这个:

SELECT ... FROM ... GROUP BY SUBSTRING(myDate,1,4)

或者

SELECT ... FROM ... GROUP BY Left(myDate,4)

答案 2 :(得分:0)

你可以使用datepart函数;

select DATEPART(year,CONVERT(date,col,105)),COUNT(*) from table_1
group by DATEPART(year,CONVERT(date,col,105))