-- --------------------------------------------------------------------------------
-- 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} ......
这样的一个长的字符串

解决方案 »

  1.   

    贴建表及插入记录的SQL,以供测试
    SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");
       SET @str = CONCAT(@tmp + "/" + @str);
    ->
    SET @tmp = CONCAT("{",@count, "," ,@logDate,"}");
       SET @str = CONCAT(@tmp , "/" , @str);
      

  2.   

    感谢WWWWA的回复,我试过了 
    SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");
      SET @str = CONCAT(@tmp + "/" + @str);
    select @str后返回的值确实是:{count,time}/{count,time}的结果 但是如果数据过多的话就返回一个数值,是不是@str不够装啊?
      

  3.   

    不会吧,@str有多长?length(@str)
    or
    将@str中的内容插入1个表中保存
      

  4.   

    建议
    将@str中的内容插入1个表中保存,再SELECT 此表查看
    ...
    SET @tmp = CONCAT("{",@count, "," ,@logDate,"}");
    SET @str = CONCAT(@tmp , "/" , @str);
    insert into lsb values(@str);
    ....
      

  5.   

    @str是存储过程SET出来的。。我也不知道默认值有多大,是打算统计时间从2011-12-06 00:00:00到2011-12-06 23:00:00那一天来测试下 看效果如何 如果能用 打算统计到现在的记录
      

  6.   

    -- --------------------------------------------------------------------------------
    -- 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
    晕了返回的结果乱了。。
      

  7.   

    SET @tmp = CONCAT("{"+@count + "," +@logDate+"}");->
    SET @tmp = CONCAT("{",@count , "," ,@logDate,"}");
       insert into test(test)value(@tmp);
       insert into test(test)value(@tmp);
      

  8.   

    恩 晕 我刚才改过了,你刚才提示我才发现存储过程竟然没改成功。。SET @tmp = CONCAT("{",@count , "," ,@logDate,"}");这个是对的,呵呵 但是还是没明白为什么单字段无法输出。。@str这个字段是不是塞不下。。还是怎么的?