CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`order` varchar(255) DEFAULT NULL,
`des` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;create trigger trigger_test before insert on test
for each row
begin
set new.order =concat('Ord',lpad(cast(new.id as char),5,'0'));
end;不行啊,得到的是00000想要如下效果
id order des
1 00001
2 00002
咋么才能做到啊SQL
试试
我需要的是order后面的数要和id保持一致
insert into test(des) values('中国');
select * from test;
create trigger trigger_test before insert on test
for each row
begin
set new.order =concat('Ord',right(concat('0000',new.id),5));
end;insert into test(des) values('中国');
select * from test;这样也不行哦,和原来一样的仍是ord00000
只有在insert into test(id) values(6); 这样才可以
而这样的insert into test(des) values('中国'); new.id好像就取不到id
create trigger trigger_test before insert on test
for each row
begin
declare n int;
select max(id) into n from test;
if n is null then
set n=1;
else
set n=n+1;
end if;
case
when n<10 && n>=0 then
set new.order=concat('ord','0000',cast(n as char));
when n<100 && n>=10 then
set new.order=concat('ord','000',cast(n as char));
when n<1000 && n>=100 then
set new.order=concat('ord','00',cast(n as char));
when n<10000 && n>=1000 then
set new.order=concat('ord','0',cast(n as char));
else
set new.order=concat('ord',cast(n as char));
end case;
end //
DELIMITER $$
CREATE TRIGGER trigger_test BEFORE INSERT ON testa
FOR EACH ROW BEGIN
SET new.order =CONCAT('Ord',RIGHT(CONCAT('0000',LAST_INSERT_ID()+1),5));
END$$
DELIMITER ;