로그인 로그 행이 인서트될 때마다 로그인 로그 코드 컬럼이 lg_in_0001, lg_in_0002 이런 식으로 자동으로 증가되게 하기
SUBSTRING_INDEX
LPAD
: 문자열을 지정된 길이만큼 왼쪽으로 패딩 (특정 문자로 채우기)SUBSTRING_INDEX(l.login_log_code,'_',-1) -- 구분자 _ 뒤인 0001 0002 같은 숫자 반환
MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1)AS UNSIGNED))+1 -- 부호 없는 현재까지의 가장 큰 login log 코드를 찾아서 1 더한 것
-- 9999 이상인 경우 : 앞에 lg_in 붙이고 숫자 부분은 그냥 1을 증가시키기
-- 9999 미만인 경우 : 앞에 lg_in 붙이고 자릿수 포맷 설정
CONCAT('lg_in_', LPAD(MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1) AS UNSIGNED))+1,4,'0')) -- 자리수 4자리로 맞추고 빈공간 0으로 채우기
전체 쿼리문 🔽
SELECT
(CASE
WHEN COUNT(l.login_log_code) = 0
THEN 'lg_in_0001'
WHEN MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1)AS UNSIGNED))+1 > 9999
THEN CONCAT('lg_in_', MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1) AS UNSIGNED))+1)
ELSE CONCAT('lg_in_', LPAD(MAX(CAST(SUBSTRING_INDEX(l.login_log_code,'_',-1) AS UNSIGNED))+1,4,'0'))
END) AS loginLogCode
FROM
login_log AS l;