Как создать динамический идентификатор с триггером MySQL перед вставкой - PullRequest
0 голосов
/ 06 марта 2019

Мне нужно сгенерировать student_roll_no как 20191B01; Я хочу увеличить последние две цифры student_roll_no как 20191B02,..........20191B10,20191B11.С помощью следующего кода я могу получить до 20191B09 после этого 20191B010, но мне нужно 20191B10.

SET NEW.student_roll_no = CONCAT(
   YEAR(CURRENT_DATE), 
   NEW.class_code,
   IFNULL(CONCAT('0',(substring((SELECT student_roll_no FROM students WHERE class_code = NEW.class_code ORDER BY created_at DESC LIMIT 1),-2)+1)),'01'))

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Используйте следующий код для решения вашей проблемы.

SET @roll_num = IFNULL((substring((SELECT student_roll_no FROM students WHERE class_code = NEW.class_code ORDER BY created_at DESC LIMIT 1),-2) +1),'1'),
NEW.student_roll_no = CONCAT(YEAR(CURRENT_DATE), NEW.class_code, 
        IF (    
           @roll_num < 10,
           CONCAT('0',@roll_num),
           @roll_num
       )
)
0 голосов
/ 06 марта 2019

Если вы установили двухзначный номер студента, используйте LPAD. Ссылка

в противном случае этот фрагмент кода может быть полезен:

SET @number = IFNULL(
                ( substring( ( SELECT `cache`.`value` FROM `cache` ORDER BY `cache`.`value` DESC LIMIT 1 ),- 2 ) + 1 ),
                '1' 
            );

SET NEW.student_roll_no = CONCAT(
    YEAR ( CURRENT_DATE ),
    NEW.class_code,
    IF
        (
            @number < 10,
            CONCAT('0',@number),
            @number 
        ) 
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...