-1

正しくコンパイルされる次の手順を定義しました。

http://pastebin.com/pBHFctHq

そのプロシージャを呼び出すと、エラーが返されます。

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

問題はカーソルから日付を取得することだと思いますが、どうすれば解決できますか?

コードの簡単な説明:私はさまざまなテーブルをループし、テーブルに存在する可能性のある各パーティションに関する情報を収集しています(各テーブルは日付でパーティション化された範囲です)

4

2 に答える 2

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;
于 2013-01-02T16:27:43.330 に答える
0

日付値の前後に引用符があります:''2012-12-30''。外側の引用符は削除する必要があります。これは有効なDATEフィールド値ではありません。

于 2013-01-02T16:07:01.343 に答える