如何在sql查询中获取周格式字符串
我有以下SQL查询(SQL server 2008): 结果是一个包含以下数据的表格: 我不想显示周数而想显示如下格式的周:如何在sql查询中获取周格式字符串,sql,sql-server,Sql,Sql Server,我有以下SQL查询(SQL server 2008): 结果是一个包含以下数据的表格: 我不想显示周数而想显示如下格式的周: MM/dd其中MM=月,dd是一周开始的日期 如果我能从一周的第一天开始,然后是中间斜杠,然后是该周的最后一天,最后是这个月,那将是非常棒的:例如:11-17/04(4月11日至17日),等等 这是我想要的最后一张表: 有什么线索吗?如果有人需要它,只要找到一个解决方案,也许不是最好的,但很有效 SELECT sum(data.freq) as freq, data.
MM/dd
其中MM=月,dd是一周开始的日期
如果我能从一周的第一天开始,然后是中间斜杠,然后是该周的最后一天,最后是这个月,那将是非常棒的:例如:11-17/04(4月11日至17日),等等
这是我想要的最后一张表:
有什么线索吗?如果有人需要它,只要找到一个解决方案,也许不是最好的,但很有效
SELECT sum(data.freq) as freq,
data.week as week, CAST(data.weekstart as varchar) + '-' + CAST(data.weekend as varchar) + '/' + CAST(data.monthend as varchar) as formatweek
FROM (
SELECT
count(daterequested) as freq,
datepart(wk,daterequested) as week,
DATEPART(dd,DATEADD(dd, -(DATEPART(dw, daterequested)-1), daterequested)) weekstart,
DATEPART(dd,DATEADD(dd, 7-(DATEPART(dw, daterequested)), daterequested)) weekend,
DATEPART(mm,DATEADD(dd, 7-(DATEPART(dw, daterequested)), daterequested)) monthend,
daterequested
FROM requestma
JOIN contracts mc ON (mc.uid= ma.uid)
JOIN groups og ON og.groupuid = mc.groupuid
JOIN member m ON (m.memberuid = mc.memberuid)
WHERE daterequested BETWEEN
DATEADD(MONTH,-1,GETDATE())
AND
GETDATE()
AND isdeleted = 0
GROUP BY datepart(wk,daterequested),daterequested
--ORDER BY daterequested ASC
) data
GROUP BY data.week,data.weekstart,data.weekend,data.monthend
由于datapart(wk,adate)返回一年中的一周,因此当您有多年数据时,您的group by可能不会返回预期结果。
SELECT sum(data.freq) as freq,
data.week as week, CAST(data.weekstart as varchar) + '-' + CAST(data.weekend as varchar) + '/' + CAST(data.monthend as varchar) as formatweek
FROM (
SELECT
count(daterequested) as freq,
datepart(wk,daterequested) as week,
DATEPART(dd,DATEADD(dd, -(DATEPART(dw, daterequested)-1), daterequested)) weekstart,
DATEPART(dd,DATEADD(dd, 7-(DATEPART(dw, daterequested)), daterequested)) weekend,
DATEPART(mm,DATEADD(dd, 7-(DATEPART(dw, daterequested)), daterequested)) monthend,
daterequested
FROM requestma
JOIN contracts mc ON (mc.uid= ma.uid)
JOIN groups og ON og.groupuid = mc.groupuid
JOIN member m ON (m.memberuid = mc.memberuid)
WHERE daterequested BETWEEN
DATEADD(MONTH,-1,GETDATE())
AND
GETDATE()
AND isdeleted = 0
GROUP BY datepart(wk,daterequested),daterequested
--ORDER BY daterequested ASC
) data
GROUP BY data.week,data.weekstart,data.weekend,data.monthend