2013-01-02 105 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