2013-01-02 63 views
-1

I定义了正确编译的以下过程。MySQL:将光标移入DATE

http://pastebin.com/pBHFctHq

当我调用程序返回一个错误:

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

我认为这个问题是取出由光标之日起,我将如何解决呢?

代码的小描述:我正在通过不同的表循环和收集可能存在于表中(每个表范围按日期分区)

+0

我将程序复制到pastebin中,请撤消downvote – Michael

+0

为什么投票是反对的? – Michael

+0

是您的INFORMATION_SCHEMA.PARTITIONS的PARTITION_DESCRIPTION列表是日期类型吗? – sourcecode

回答

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; 
+0

看起来是一个很好的解决方案,我现在试试 – Michael

+0

您是在哪个平台上工作? – sourcecode

+0

select STR_TO_DATE('2013-01-01','%Y-%m-%d') - >将会工作 – Michael

0

你具有围绕日期引号上的每个分区信息值:''2012-12-30''。外面的单引号应该被删除。这不是有效的DATE字段值。

+0

此信息是从信息模式返回的,我如何自动删除单引号? – Michael