Sql 从日期字段中选择年份组

Sql 从日期字段中选择年份组,sql,sql-server,Sql,Sql Server,我正试图从存储为nvarchar的日期字段中获取年份列表,因此我认为执行子查询来转换日期,然后选择年份是最好的方法,但设置它很困难 select datepart(yyyy, ( SELECT convert(date,'21-02-12 6:10:00 PM',5) datenum ) ) as [year] from SalesReport_AllDBs group by datepart(yyyy, [datenum]) 任何建议都有助于正确设置此设置子查询应位于FROM子句中: S

我正试图从存储为nvarchar的日期字段中获取年份列表,因此我认为执行子查询来转换日期,然后选择年份是最好的方法,但设置它很困难

select datepart(yyyy, 
(
SELECT convert(date,'21-02-12 6:10:00 PM',5) datenum
) 
) as [year]
from SalesReport_AllDBs
group by datepart(yyyy, [datenum])

任何建议都有助于正确设置此设置

子查询应位于FROM子句中:

SELECT datepart(yyyy, mydate) as datenum
FROM (SELECT convert(date, yourdatestringfield ,5) as myDate FROM SalesReport_AllDBs) as years
GROUP BY datepart(yyyy,mydate);
或者在一个没有子查询的查询中,这样看起来更好:

SELECT datepart(convert(date, yourdatestringfield ,5)) as datenum
FROM SalesReport_AllDBs
GROUP BY datenum

你真的应该把表改成日期而不是字符串。这只会导致一些噩梦般的场景和缓慢的查询。

您不能修复数据库以便不将日期存储为varchar吗?不要那样做!是的,我知道这是我目前无法更改的遗留数据
select distinct year(cast([datenum] as date)) year
from SalesReport_AllDBs