어리바리 신입 개발자의 얼렁뚱땅 개발 기록 ✨
23.06.27 / SUBSTRING_INDEX, UNSIGNED, CAST, CONCAT, LPAD 본문
728x90
SELECT
CASE
WHEN COUNT(*) = 0 THEN 'g001' -- 만약
WHEN CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED) < 999
THEN CONCAT('g',LPAD(MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1,3,'0'))
ELSE
CONCAT('g',MAX(CAST(SUBSTRING_INDEX(g.g_code,'g',-1) AS UNSIGNED))+1)
END AS newGoodsCode
-- 첫번째 인수 : '문자열' 또는 컬럼
-- 두번째 인스 : '구분자'
-- 세번째 인수 : 양수 : 구분자의 왼쪽 / 음수 : 구분자의 오른쪽(출력 순서는 그대로)
-- 글자 하나하나의 개수가 아닌 구분자를 기준으로 나눈 개수
-- goodsgoldcodegname에서 구분자가 g일 경우 세 번째 인수가 2라면 goods 출력 / 3이라면 goodsgoldcode출력
-- CAST(AS UNSIGNED) 정수로만 출력 (01 -> 1 / -1 -> 1) - CAST : 데이터 타입 형변환 / UNSIGNED : 정수 => 정수로 데이터 타입 형변환
-- MAX() : 최댓값
-- +1 : 앞에 있는 숫자에 +1한 숫자(숫자로 형변환 해줬기 때문에 연산 가능)
-- LPAD : 두번째 인수 : 자릿수 / 세번째 인수 : 자릿수가 빌 경우 앞 자리를 뭘로 채워줄지
-- CONCAT : 모든 '문자열' 혹은 컬럼을 더해줌(연산X) / CONCAT(g.g_code :: 'g') => g.g_code가 g001, g002일 경우 - g001::g , g002::g
FROM
tb_goods AS g;
728x90
'Database > MYSQL' 카테고리의 다른 글
23.06.20 / count & where 1=1 (0) | 2023.06.20 |
---|---|
23.06.05 / MySQL workbench, 트랜잭션 (0) | 2023.06.05 |
23.05.30 / Stored Program(프로시저,DELIMITER,매개변수,변수,함수) (1) | 2023.05.30 |
23.05.30 / GROUP_CONCAT (0) | 2023.05.30 |
23.05.29 / 서브 쿼리 (0) | 2023.05.29 |