我需要帮助格式化此触发器输出。
我需要触发器的输出具有以下格式:
2013/0001
2013/0002
...
当年份发生变化时,
2014/0001
2014/0002
...
但是我的触发器生成了这种格式:
00012013/
触发器代码如下:
SET NEW.num = CONCAT(
LPAD(COALESCE(
(SELECT MAX(LEFT(num, 4))
FROM `tb_numeros`
WHERE num LIKE DATE_FORMAT(CURDATE(), '%Y/____')), 0) + 1, 4, '0'),
DATE_FORMAT(CURDATE(), '%Y/'))
答案 0 :(得分:1)
我不明白你是如何获得数字序列的,但是,我认为你可以简化一下代码:
...
SET `get_year` := YEAR(NOW());
SET `sequence` := (SELECT... WHERE... `num`... LIKE... `get_year`...); /* RETURN 0001 */
SET NEW.`num` := CONCAT(`get_year`, '/', `sequence`);
...
答案 1 :(得分:1)
您可以使用缩进来澄清正在发生的事情:
SET NEW.num = CONCAT(
LPAD(
COALESCE(
(
SELECT MAX(LEFT(num, 4))
FROM `tb_numeros`
WHERE num LIKE DATE_FORMAT(CURDATE(), '%Y/____')
), 0
) + 1, 4, '0'
),
DATE_FORMAT(CURDATE(), '%Y/')
)
很明显,你获得第二名,因为,这是CONCAT()
内的第二个条款。
答案 2 :(得分:0)
是啊!作品!!!
SET NEW.num = CONCAT(
DATE_FORMAT(CURDATE(), '%Y/'),
LPAD(
COALESCE(
(
SELECT MAX(RIGHT(num, 4))
FROM `tb_numeros`
WHERE num LIKE DATE_FORMAT(CURDATE(), '%Y/____')
), 0
) + 1, 4, '0'
)
)