mySql存储过程问题,求高手解答,在线等~

zthsn 2011-12-29 09:50:28
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `RechargeLog_SumTime`(
)
BEGIN

SET @startTime = "2011-12-06 00:00:00";
SET @endTime = "2011-12-06 23:00:00";
SET @count = 0;
SET @logDate = "";
SET @tmp = "";
SET @str = "";
WHILE @startTime < @endTime DO
SELECT
count(RechargeLogId),
DATE_FORMAT(@startTime, '%Y-%m-%d %H') LogDate
INTO @count, @logDate
FROM `DataAnalysis`.`RechargeLog`
WHERE LogDate
BETWEEN
@startTime
AND
DATE_ADD(@startTime, INTERVAL 1 DAY_HOUR);
IF @count IS NULL OR @count = "" THEN
SET @count = 0;
END IF;
SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");
SET @str = CONCAT(@tmp + "/" + @str);
SET @startTime = DATE_ADD(@startTime, INTERVAL 1 DAY_HOUR);
END WHILE;

SELECT @str;
END$$

这是执行后返回结果:46262
但是我想要的是这样的结果:{count,time}/{count,time} ......
这样的一个长的字符串
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lv9942 2011-12-29
  • 打赏
  • 举报
回复
恩 好的,谢谢啊 等下我就让我朋友把分给你~
WWWWA 2011-12-29
  • 打赏
  • 举报
回复
估计是太长了,你要1天的数据,建议保存在表中
lv9942 2011-12-29
  • 打赏
  • 举报
回复
恩 晕 我刚才改过了,你刚才提示我才发现存储过程竟然没改成功。。SET @tmp = CONCAT("{",@count , "," ,@logDate,"}");这个是对的,呵呵 但是还是没明白为什么单字段无法输出。。@str这个字段是不是塞不下。。还是怎么的?
WWWWA 2011-12-29
  • 打赏
  • 举报
回复
SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");->
SET @tmp = CONCAT("{",@count , "," ,@logDate,"}");
insert into test(test)value(@tmp);
insert into test(test)value(@tmp);
lv9942 2011-12-29
  • 打赏
  • 举报
回复
-- --------------------------------------------------------------------------------
-- Routine DDL
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `RechargeLog_SumTime`(
)
BEGIN

SET @startTime = "2011-12-06 00:00:00";
SET @endTime = "2011-12-06 23:00:00";
SET @count = 0;
SET @logDate = "";
SET @tmp = "";
SET @str = "";
WHILE @startTime < @endTime DO
SELECT
count(RechargeLogId),
DATE_FORMAT(@startTime, '%Y-%m-%d %H') LogDate
INTO @count, @logDate
FROM `DataAnalysis`.`RechargeLog`
WHERE LogDate
BETWEEN
@startTime
AND
DATE_ADD(@startTime, INTERVAL 1 DAY_HOUR);
IF @count IS NULL OR @count = "" THEN
SET @count = 0;
END IF;
SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");
insert into test(test)value(@tmp);
SET @startTime = DATE_ADD(@startTime, INTERVAL 1 DAY_HOUR);
END WHILE;
END$$
表的内容。。
2011
2011
2015
2014
2011
2011
2011
2011
2011
2012
2012
2011
2011
2011
2011
2011
2011
2011
2011
2011
2011
2011
2011
晕了返回的结果乱了。。
lv9942 2011-12-29
  • 打赏
  • 举报
回复
恩。。我试试看
lv9942 2011-12-29
  • 打赏
  • 举报
回复
@str是存储过程SET出来的。。我也不知道默认值有多大,是打算统计时间从2011-12-06 00:00:00到2011-12-06 23:00:00那一天来测试下 看效果如何 如果能用 打算统计到现在的记录
WWWWA 2011-12-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lv9942 的回复:]

表其实没什么主要 我就用到2个字段一个是id(自动增长列)还有个就是时间(记录插入的时间)
我主要是想查看每个小时内的插入数,看看那几个小时是空闲状态。
[/Quote]
建议
将@str中的内容插入1个表中保存,再SELECT 此表查看
...
SET @tmp = CONCAT("{",@count, "," ,@logDate,"}");
SET @str = CONCAT(@tmp , "/" , @str);
insert into lsb values(@str);
....
lv9942 2011-12-29
  • 打赏
  • 举报
回复
表其实没什么主要 我就用到2个字段一个是id(自动增长列)还有个就是时间(记录插入的时间)
我主要是想查看每个小时内的插入数,看看那几个小时是空闲状态。
WWWWA 2011-12-29
  • 打赏
  • 举报
回复
不会吧,@str有多长?length(@str)
or
将@str中的内容插入1个表中保存
lv9942 2011-12-29
  • 打赏
  • 举报
回复
感谢WWWWA的回复,我试过了
SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");
SET @str = CONCAT(@tmp + "/" + @str);
select @str后返回的值确实是:{count,time}/{count,time}的结果 但是如果数据过多的话就返回一个数值,是不是@str不够装啊?
WWWWA 2011-12-29
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,以供测试
SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");
SET @str = CONCAT(@tmp + "/" + @str);
->
SET @tmp = CONCAT("{",@count, "," ,@logDate,"}");
SET @str = CONCAT(@tmp , "/" , @str);
lv9942 2011-12-29
  • 打赏
  • 举报
回复
同样的问题~~等待高手~~

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧