我定义了以下正确编译的程序。
当我调用该程序时,它会返回错误:
ERROR 1292 (22007): Incorrect date value: ''2012-12-30'' for column 'date_part' at row 11
我认为问题是从光标获取日期,我将如何解决?
代码的小描述:我循环遍历不同的表,并收集表中可能存在的每个分区的信息(每个表按日期分区)
答案 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
字段值。