我有一些脚本可以为表创建自定义ID。我正在检查日期的最后一个ID,加上一个,并将新值存储在我的连续表中。
有完整的代码:
CREATE DEFINER=`somuser`@`somewhere` FUNCTION `get_id_est`(fecha date) RETURNS char(14) CHARSET latin1
MODIFIES SQL DATA
BEGIN
DECLARE anterior INTEGER DEFAULT 0;
DECLARE retval char(14);
DECLARE fechaserv char(6);
SET fechaserv = date_format(fecha, '%y%m%d');
select max(consecutivo) into retval from dias group by fecha having fecha = fechaserv;
SET anterior = (anterior + 1);
if anterior = 1 then
INSERT INTO dias (fecha, consecutivo) VALUES (fechaserv, anterior);
else
UPDATE dias SET consecutivo = anterior where fecha = fechaserv;
end if;
SET retval = concat('EZ', fechaserv,'-', LPAD(anterior,5,'0'));
RETURN retval;
END
如果我运行以下命令来测试使用此值的最大值:
CREATE DEFINER=`somuser`@`somewhere` FUNCTION `get_id_est`(fecha date) RETURNS char(14) CHARSET latin1
MODIFIES SQL DATA
BEGIN
DECLARE anterior INTEGER DEFAULT 0;
DECLARE retval char(14);
DECLARE fechaserv char(6);
SET fechaserv = date_format(fecha, '%y%m%d');
select max(consecutivo) into retval from dias group by fecha having fecha = fechaserv;
return retval;
end
然后我执行以下查询:
mysql> select crea_id_est('2013-12-01');
+---------------------------+
| crea_id_est('2013-12-01') |
+---------------------------+
| NULL |
+---------------------------+
1 row in set (0.00 sec)
但是......如果我只检查查询,我会得到这个:
mysql> select max(consecutivo) from dias group by fecha having fecha = '131201';
+------------------+
| max(consecutivo) |
+------------------+
| 1 |
+------------------+
1 row in set (0.00 sec)
这是相同的查询,但结果完全不同。我检查了服务器,数据库和连接的字符集,更改了它,重新加载了查询,droped并重新创建了该函数,没有任何内容。我甚至在另一台服务器上测试过......
有什么想法吗?
提前致谢。