在mssql中需要格式为yyyy-mm的日期

Sar*_*iam 2 sql sql-server sql-server-2008

需要日期格式为yyyy-mm,应分组以获取计数,但是当我给

group by date is says invalid
Run Code Online (Sandbox Code Playgroud)

我找到了这个解决方案

任何人都可以通过提供其他解决方案来帮助我

select 
count(*) as count, 
Convert(char(10), RH.updated_datetime, 105) as date,
SUM( 
  datediff(SECOND, 
       PRI.procedure_performed_datetime ,RH.updated_datetime
  )
)/count(*) as average_reporting_tat 
from 
report R, 
report_history RH, 
study S, 
procedure_runtime_information PRI, 
priorities PP, 
patient P, 
"procedure" PR 

where 

RH.report_fk=R.pk and RH.pk IN ( 
  select pk from ( 
    select * from report_history where report_fk=r.pk  
  ) as result 
  where old_status_fk IN (21, 27)
) AND R.study_fk = S.pk 
AND S.procedure_runtime_fk = PRI.pk 
AND PRI.procedure_fk = PR.pk 
AND S.priority_fk = PP.pk 
AND PRI.patient_fk = P.pk 
AND RH.updated_datetime >= '2012-05-01' 
AND RH.updated_datetime <= '2013-09-12' 
group by Convert(char(10), RH.updated_datetime, 105)
Run Code Online (Sandbox Code Playgroud)

Gar*_*thD 5

我认为最简单的方法如下:

CONVERT(VARCHAR(7), RH.updated_datetime, 126)
Run Code Online (Sandbox Code Playgroud)

但是,我从来都不喜欢在应用程序层之前将日期转换为字符串,所以如果是我,我会将其保留为日期格式,但是使用以下命令将每个日期转换为每月的第一天:

DATEADD(MONTH, DATEDIFF(MONTH, 0, RH.updated_datetime), 0)
Run Code Online (Sandbox Code Playgroud)

这意味着您的应用程序将列作为日期接收,并且可以将其作为日期进行操作,按日期进行排序等,然后,如果您确实想像显示它一样yyyy-mm,可以在最后一分钟进行格式化。