1:得到当前天数。
select day(dateadd(mm,1,getdate())-day(getdate())) as dayOfThisMonth
讲解知识点:
1)SQL server 日期直接相加减,加减的是天数。
2)日期加减函数dateadd(mm,1,getdate()),三个参数
第一个参数是mm即month,也可以是dd即day,也可以是yy即year
第二参数是整数类型,加减的是第一个参数对应的多少day,多少month,多少year。
第三个参数是当前的系统日期
实现:
1)用下个月的当前时间 - 这个月的天数 = 这个月最后一天的当前时间
2)取得这个月最后一天的当前时间 天数, 即当月天数
2:flash绘图,生成每个节点的点击率
-----------------------------------------------------------------------------------------
DECLARE @rateSql NVARCHAR(4000),@defStr NVARCHAR(4000),@i INT;
DECLARE @fz INT,@fm INT,@perRate NUMERIC(10,2);
SET @i = 0 ;
WHILE @i < @Count
BEGIN
SET @rateSql =
'SELECT @fz = SUM(fz),@fm = SUM(fm) FROM (' + CHAR(13) +
' SELECT siteID,saFlag,CASE WHEN saFlag = 0 THEN COUNT(*) ELSE 0 END fz,COUNT(*) fm' + CHAR(13) +
' FROM t_arrive WHERE SiteID = '''+@SiteID+'''' + CHAR(13) +
' AND insTime > DATEADD(hh,@i*@TimeSpan,@StartDate)' + CHAR(13) +
' AND insTime < DATEADD(hh,(@i+1)*@TimeSpan,@StartDate)' + CHAR(13) +
' GROUP BY siteID,saFlag ) A';
SELECT @defStr='@fz INT OUT,@fm INT OUT,@StartDate DATETIME,@TimeSpan INT,@i INT';
EXEC sp_executesql @rateSql,@defStr,
@fz=@fz OUTPUT,@fm=@fm OUTPUT,@StartDate=@StartDate,@TimeSpan=@TimeSpan,@i=@i;
IF(@fz IS NULL) SET @fz = 0;
IF(@fm IS NULL) SET @fm = 2147483000;
SET @perRate = CAST(CAST(@fz*100 AS FLOAT)/@fm AS NUMERIC(10,2));
IF (@perRate IS NULL) SET @perRate = 0;
IF (@fz = 0) SET @fz = 2147483000;
INSERT INTO #tb_fzfm VALUES(@i+1,@perRate,@fz);
SET @i = @i + 1;
END
-------------------------------------------------------------------------------------------
SELECT ID,perRate FROM #tb_fzfm -- 第一个结果集(第几个节点,每个坐标点的点击率)
-------------------------------------------------------------------------------------------