MySQL:将游标提取到DATE

时间:2013-01-02 15:55:02

标签: mysql date stored-procedures cursor

我定义了以下正确编译的程序。

http://pastebin.com/pBHFctHq

当我调用该程序时,它会返回错误:

ERROR 1292 (22007): Incorrect date value: ''2012-12-30'' for column 'date_part' at row 11

我认为问题是从光标获取日期,我将如何解决?

代码的小描述:我循环遍历不同的表,并收集表中可能存在的每个分区的信息(每个表按日期分区)

2 个答案:

答案 0 :(得分:1)

我认为你正在比较字符串和日期,这就是你收到错误的原因。 您可以使用它进行比较:

           TO_DATE(PARTITION_DESCRIPTION,'YYYY-MM-DD')      // in oracle this will work

           STR_TO_DATE(PARTITION_DESCRIPTION, '%Y-%m-%d')   // in mysql this will work

           convert(varchar(20),PARTITION_DESCRIPTION,104)   // in ms-sql this will work

所以你的代码看起来像这样:

   BLOCK2: BEGIN
                            DECLARE loop1_eof INT DEFAULT FALSE;

                            DECLARE cur1 CURSOR FOR SELECT TO_DATE(PARTITION_DESCRIPTION,'YYYY-MM-DD')
                            FROM INFORMATION_SCHEMA.PARTITIONS
                            WHERE TABLE_NAME=tmp_title AND TABLE_SCHEMA='test1';    
                            DECLARE CONTINUE HANDLER FOR NOT FOUND SET loop1_eof = TRUE;

                            OPEN cur1;
                            loop1: LOOP
                                    FETCH cur1 INTO date_part;
                                    SELECT max(id) from `test1`.tmp_title where CurrentDate < date_part;
                                    IF loop1_eof THEN
                                            CLOSE cur1;
                                            LEAVE loop1;
                                    END IF;
                            END LOOP loop1;
                    END BLOCK2;

答案 1 :(得分:0)

您在日期值附近有引号:''2012-12-30''。应删除外部单引号。这不是有效的DATE字段值。