我的表格中有一个发票日期列,其中包含以下数据
20150131
20150231
20160128
20161231
我想根据交易年份对数据进行分组......即2015年或2016年。我的列类型为nvarchar
。
有人可以帮忙。我正在使用SQL Server 2012。
答案 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))