2013-11-27 37 views
0

我需要幫助格式化此觸發器輸出。MySQL觸發與curdate concat()

我需要的觸發器的輸出有這樣的格式:

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

回答

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()內的第二個條款。

+0

我試着改變順序,但生成mysql錯誤。 任何有關他的命令的消息? –

+0

我怎麼能建議任何東西?我不知道你是如何改變代碼或你現在得到什麼錯誤。 –

1

我不明白你怎麼弄的數字序列,但是,我認爲你可以簡化代碼位:

... 
SET `get_year` := YEAR(NOW()); 
SET `sequence` := (SELECT... WHERE... `num`... LIKE... `get_year`...); /* RETURN 0001 */ 
SET NEW.`num` := CONCAT(`get_year`, '/', `sequence`); 
... 
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' 
) 
)