MySQL触发concat与curdate()

时间:2013-11-27 14:36:58

标签: mysql triggers

我需要帮助格式化此触发器输出。

我需要触发器的输出具有以下格式:

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/'))

3 个答案:

答案 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'
)
)